Я довольно часто сопоставляю строки с регулярными выражениями. В Java:
java.util.regex.Pattern.compile ( "\ ш +"). Согласовани ( "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
?