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

aaを使用するため、一致しますfind

(ab)*a一致しaます。

たぶんあなたは次のような表現が必要です:

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

あなたは2つの異なることを求めています:

を使用すると、文字列全体がパターンに対応するm("aa").matchesかどうかを尋ねられます。aam

を使用すると、パターンに対応するサブストリングp.findAllIn("aa").toListあるかどうかを尋ねられます。aam

したがって、はい、一致するサブ文字列がありますmが、完全な文字列aa自体は一致しません。

于 2012-06-11T20:44:57.860 に答える