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

假设我有一个正则表达式模式,我想匹配很多字符串。

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

我只想检查给定的字符串是否完全匹配正则表达式。 在Scala中做这件事的好方法是什么?

我知道我可以在Regexes上进行模式匹配,但在这种情况下,这在语法上不是很令人满意,因为我没有要提取的组:

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

或者我可以回到底层的Java模式:

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

这也不够优雅。

有更好的解决方案吗?


回答我自己的问题,我将使用“皮条客我的图书馆模式”

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

并像这样使用它

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

除非有人提出更好的(标准)解决方案。

笔记

  • 我没有皮条客String来限制潜在副作用的范围。

  • 在这种情况下, unapplySeq阅读不太好。


  • 我不太了解Scala,但看起来你可以这样做:

    "5".matches("d")
    

    参考

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

  • 对于完整匹配,您可以使用unapplySeq 。 此方法尝试匹配目标(完整匹配)并返回匹配项。

    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/77017.html

    上一篇: How to check whether a String fully matches a Regex in Scala?

    下一篇: Regex to match against something that is not a specific substring