(все примера можно запустить через лестницу РЕПЛ или SBT консоли)Scala многострочный регулярное выражение/регулярное выражение не работает
У меня есть эта многострочный строка:
val a= "A0DA000043\n"+
"A020000008933F57845F706921\n"+
"A0A0000000 (9000)\n"+
"A0A40000027FDE (9FXX,9000) \n"+
"84E400000BD2012F261C86BC6C3C679F (6101,9000)\n"+
"00A4040008A000000151000000 (61XX,9000)"
Тогда у меня есть это регулярное выражение:
(?m)^ *(?:[0-9A-F]{2})+(?: +\([0-9A-FX,]+\))? *$
Я использую это так:
scala> """(?m)^ *(?:[0-9A-F]{2})+(?: +\([0-9A-FX,]+\))? *$""".r.pattern.matcher(a).matches()
res10: Boolean = false
, но если это сделать:
scala> ("""(?m)^ *(?:[0-9A-F]{2})+(?: +\([0-9A-FX,]+\))? *$""".r findAllIn a).toList
res8: List[String] = List(A0DA000043, A020000008933F57845F706921, A0A0000000 (9000), "A0A40000027FDE (9FXX,9000) ", 84E400000BD2012F261C86BC6C3C679F (6101,9000), 00A4040008A000000151000000 (61XX,9000))
возвращает все строки. Но мне интересно, почему .matches() не работает.
Если я попробовать одну строку в .matches
scala> """(?m)^ *(?:[0-9A-F]{2})+(?: +\([0-9A-FX,]+\))? *$""".r.pattern.matcher("A0A40000027FDE (9FXX,9000)").matches()
res9: Boolean = true
Теперь даже самый простой многострочный регулярное выражение не работает
"(?m)^foo$".r.pattern.matcher("foo\nfoo").matches()
res38: Boolean = false
что не так? может ли кто-нибудь дать пример о том, как использовать (? m) или даже попытаться сопоставить val a.
Я хочу знать, соответствует ли val линиям для моего регулярного выражения.
Заранее спасибо
EDIT: я попробовал некоторые из ниже ответа, как и использование * для моей новой строки (ей?).. Он работал, например, 1, но он считает недопустимыми данные действительными. Пример:
scala> val c = "A0A0000000 (9000"
c: String = A0A0000000 (9000
scala> """(?s)^ *(?:[0-9A-F]{2})+(?: +\([0-9A-FX,]+\))? *.*$""".r.pattern.matcher(c).matches()
res45: Boolean = true
'. *' В конце концов будет соответствовать всем остальным недопустимым символам жадно. –