请解释Scala regexp模式匹配中的这种非直观行为

Jas*_*son 1 regex scala

为什么同一匹配器的匹配行为不同?

val str = "project git commit: da2837ec0a"

val Expr = "([a-f0-9]{10})$".r 

scala> str match { case Pattern(c) => c; case _ => "no match" }
res30: String = no match

scala> (Pattern findFirstIn str).get
res31: String = da2837ec0a
Run Code Online (Sandbox Code Playgroud)

Hug*_*ugh 10

使用带模式匹配的正则表达式时,必须匹配整个字符串.如果不需要此行为,则可以将其设置为未锚定的正则表达式:val Pattern = "whatever".r.unanchored

相反,findFirstIn在字符串中的任何位置查找匹配项 - 因此unanchored在您的示例中不需要匹配.

这在API参考中有记录,这通常有助于解决这些问题.