0
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 场比赛。你怎么解释这个?

4

2 回答 2

4

你在问两个不同的事情:

使用时m("aa").matches,您是在询问整个字符串是否aa与模式相对应m

当您使用时p.findAllIn("aa").toList,您是在询问是否有对应于模式的子字符串aam

所以,是的,有匹配的子字符串m,但完整的字符串aa本身没有。

于 2012-06-11T20:44:57.860 回答
4

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

(ab)*a将匹配a

也许你想要一个像这样的表达式:

^(?:ab|ba|(?:ab)*a|(?:ba)*b)$
于 2012-06-11T18:06:14.057 回答