How to check whether a String fully matches a Regex in Scala?

Assume I have a Regex pattern I want to match many Strings to.

val Digit = """d""".r

I just want to check whether a given String fully matches the Regex. What is a good and idiomatic way to do this in Scala?

I know that I can pattern match on Regexes, but this is syntactically not very pleasing in this case, because I have no groups to extract:

scala> "5" match { case Digit() => true case _ => false }
res4: Boolean = true

Or I could fall back to the underlying Java pattern:

scala> Digit.pattern.matcher("5").matches
res6: Boolean = true

which is not elegant, either.

Is there a better solution?


Answering my own question I'll use the "pimp my library pattern"

object RegexUtils {
  implicit class RichRegex(val underlying: Regex) extends AnyVal {
    def matches(s: String) = underlying.pattern.matcher(s).matches
  }
}

and use it like this

import RegexUtils._
val Digit = """d""".r
if (Digit matches "5") println("match")
else println("no match")

unless someone comes up with a better (standard) solution.

Notes

  • I didn't pimp String to limit the scope of potential side effects.

  • unapplySeq does not read very well in that context.


  • I don't know Scala all that well, but it looks like you can just do:

    "5".matches("d")
    

    References

  • http://langref.org/scala/pattern-matching/matching

  • For the full match you may use unapplySeq . This method tries to match target (whole match) and returns the matches.

    scala> val Digit = """d""".r
    Digit: scala.util.matching.Regex = d
    
    scala> Digit unapplySeq "1"
    res9: Option[List[String]] = Some(List())
    
    scala> Digit unapplySeq "123"
    res10: Option[List[String]] = None
    
    scala> Digit unapplySeq "string"
    res11: Option[List[String]] = None
    
    链接地址: http://www.djcxy.com/p/77018.html

    上一篇: 正则表达式在Java中,并忽略空白

    下一篇: 如何检查字符串是否与Scala中的正则表达式完全匹配?