I fairly frequently match strings against regular expressions. In Java:
java.util.regex.Pattern.compile("\w+").matcher("this_is").matches
Ouch. Scala has many alternatives.
"\\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}
The first is just as heavy-weight as the Java code.
The problem with the second is that you can't supply a compiled pattern ("this_is".matches("\\w+".r")
). (This seems to be an anti-pattern since almost every time there is a method that takes a regex to compile there is an overload that takes a regex).
The problem with the third is that it abuses unapplySeq
and thus is cryptic.
The fourth is great when decomposing parts of a regular expression, but is too heavy-weight when you only want a boolean result.
Am I missing an easy way to check for matches against a regular expression? Is there a reason why String#matches(regex: Regex): Boolean
is not defined? In fact, where is String#matches(uncompiled: String): Boolean
defined?