Я довольно часто сопоставляю строки с регулярными выражениями. В Java:
java.util.regex.Pattern.compile( "\ W +" ). Matcher ( "this_is" ). Соответствует
Уч. Scala имеет много альтернатив.
-
"\\w+".r.pattern.matcher("this_is").matches
-
"this_is".matches("\\w+")
-
"\\w+".r unapplySeq "this_is" isDefined
-
val R = "\\w+".r; "this_is" match { case R() => true; case _ => false}
Первый такой же тяжелый, как и код Java.
Проблема со вторым заключается в том, что вы не можете предоставить скомпилированный шаблон ("this_is".matches("\\w+".r")
). (Кажется, это анти-шаблон, поскольку почти каждый раз, когда есть метод, который требует компиляции регулярных выражений, возникает перегрузка, которая принимает регулярное выражение).
Проблема с третьим заключается в том, что она злоупотребляет unapplySeq
и, следовательно, является загадочной.
Четвертое отлично при разложении частей регулярного выражения, но слишком тяжело, когда вам нужен только логический результат.
Я пропустил простой способ проверить совпадения с регулярным выражением? Есть ли причина, почему String#matches(regex: Regex): Boolean
не определен? На самом деле, где String#matches(uncompiled: String): Boolean
определено?