繁体   English   中英

Scala regex怪异行为

[英]scala regex weird behavior

scala> val p = "ab|ba|(ab)*a|(ba)*b".r
p: scala.util.matching.Regex = ab|ba|(ab)*a|(ba)*b

scala> val m = p.pattern.matcher _
m: java.lang.CharSequence => java.util.regex.Matcher = <function1>

scala> m("aa").matches
res9: Boolean = false

scala> p.findAllIn("aa").toList
res10: List[String] = List(a, a)

按照res9,“ aa”不应匹配。 但是res10说有2场比赛。 您如何解释呢?

aa将被匹配,因为您使用find

(ab)*a将匹配a

也许您想要这样的表达式:

^(?:ab|ba|(?:ab)*a|(?:ba)*b)$

您在问两件事:

当使用m("aa").matches ,您要询问整个字符串aa是否对应于模式m

当您使用p.findAllIn("aa").toList ,您正在询问是否存在与模式m对应的aa 子字符串

因此,是的,存在与m匹配的子字符串,但完整字符串aa本身不匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM