我看过原子群的简单演示。裁判官:
a(?>bc|b)d我试图在java 7上运行它,但它并不像预期的那样工作,因为它与本演示中的内容匹配:
Pattern pattern = Pattern.compile("a(?>bc|b)d");
Matcher matcher = pattern.matcher("abd");
System.out.println("matches="+matcher.matches());指纹:
matches=true但是原子组是为了避免尝试所有的替代方案。
如何在java中打开原子组?
发布于 2014-06-08 14:36:16
你似乎误解了http://www.regular-expressions.info/atomic.html的例子
您需要理解原子组的目的是防止回溯,因此不可能更改已经匹配的子字符串和新的子字符串。但在第一次交替情况下不能找到匹配,然后再测试下一次交替情况是可以的。
所以对于字符串abd和regex a(?>bc|b)c
regex parts | matched String parts
---------------+----------------------
a | a
(?>bc|b) | b - it happens because `bc` can't be matched so next case
| from alternation inside atomic group is used
d | d如果使用链接文章a(?>bc|b)c和String abc的正则表达式,您将得到
regex parts | matched String parts
---------------+----------------------
a | a
(?>bc|b) | bc <--------+
c | nothing - c was already matched and "possessed" by atomic
| group so `c` can't be used here因为c
a(?>bc|b)c
^无法匹配您将看到false是"abc".matches("a(?>bc|b)c")的结果
https://stackoverflow.com/questions/24107034
复制相似问题