为什么我ab使用Relucutant量词获得以下正则表达式代码的输出?
Pattern p = Pattern.compile("abc*?");
Matcher m = p.matcher("abcfoo");
while(m.find())
System.out.println(m.group()); // ab
Run Code Online (Sandbox Code Playgroud)
同样,为什么我得到以下代码的空索引?
Pattern p = Pattern.compile(".*?");
Matcher m = p.matcher("abcfoo");
while(m.find())
System.out.println(m.group());
Run Code Online (Sandbox Code Playgroud)
除了Konrad Rudolph的回答:
abc*?
Run Code Online (Sandbox Code Playgroud)
匹配"ab"在任何情况下,并"c"只有当它必须.由于没有任何内容*?,正则表达式引擎立即停止.如果你有:
abc*?f
Run Code Online (Sandbox Code Playgroud)
那么它会匹配"abcf"是因为"c"必须匹配才能允许"f"匹配.另一个表达方式:
.*?
Run Code Online (Sandbox Code Playgroud)
没有匹配,因为这种模式是100%可选的.
.*?f
Run Code Online (Sandbox Code Playgroud)
会"abcf"再次匹配.
*?匹配零个或多个匹配,但尽可能少(顺便说一下,通常称为"非贪婪",而不是"不情愿").因此,如果零匹配是可能的,那就是最佳匹配.
你到底想要达到什么目的?也许非贪婪的匹配不是你需要的.
| 归档时间: |
|
| 查看次数: |
1967 次 |
| 最近记录: |