我有点困难.(我是regexp的专家,但在scala/java中没有太多使用它们).我有11个字符长度的数字字符串,只需要最后10个,所以:
val Pattern = """(\d{10})$""".r
"79283767219" match {
case Pattern(m) => m
}
Run Code Online (Sandbox Code Playgroud)
它给了MatchError,但为什么?!我误解了什么?
Dan*_*ral 11
当您匹配正则表达式模式时,正则表达式模式应匹配整个字符串.也就是说,它就像正则表达式模式一样开始^并以结束$.这背后的原因是a match应该解构右侧的整个左侧.
使用Scala 2.10,您可以调用unanchored以获取将执行部分匹配的匹配器,如下所示:
val Pattern = """(\d{10})$""".r.unanchored
Run Code Online (Sandbox Code Playgroud)
请放心,您的锚将被保留.这只是期望匹配应该应用于将被删除的整个字符串.
因为您有11位数字,而不是10.您可以设置"10和更多" {10,}.要仅匹配字符串的结尾,您需要明确指定完整模式:
val Pattern = """.*(\d{10})$""".r
Run Code Online (Sandbox Code Playgroud)
更新:直到你使用Scala 2.10并且你可以使用Daniel's,unanchored你可以像这样解决它:
Pattern.findFirstIn("79283767219")
Run Code Online (Sandbox Code Playgroud)