为什么此正则表达式与字符串匹配?

时间:2019-12-07 06:04:49

标签: java regex

String p = "(a|ab|c)*";

String s = "aabcab";

Boolean b = s.matches(p);

System.out.println(b);

此模式“ p”匹配:

1) 0 or more single 'a': a, aa, aaa
2) 0 or more single 'ab': ab, abab, ababab
3) 0 or more single 'c': c, cc, ccc

为什么它与“ aabcab”匹配?在上面的3种模式中,没有任何由字符“ a”,“ b”和“ c”组成的字符串

1 个答案:

答案 0 :(得分:3)

Kleene星号运算不会分布在其他选项上:您最可能寻找的规则是:(a*)|(ab)*|(c*)

您的模式p将匹配形成的任何字符序列,这些字符序列是零次或多次重复给定三个给定替代中的任何一个,而不是每种类型的重复可能不会混合。