首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使原子组与java regex中的更改一起工作?

如何使原子组与java regex中的更改一起工作?
EN

Stack Overflow用户
提问于 2014-06-08 14:17:45
回答 1查看 488关注 0票数 0

我看过原子群的简单演示。裁判官:

代码语言:javascript
复制
a(?>bc|b)d

我试图在java 7上运行它,但它并不像预期的那样工作,因为它与本演示中的内容匹配:

代码语言:javascript
复制
Pattern pattern = Pattern.compile("a(?>bc|b)d");
        Matcher matcher = pattern.matcher("abd");
        System.out.println("matches="+matcher.matches());

指纹:

代码语言:javascript
复制
matches=true

但是原子组是为了避免尝试所有的替代方案。

如何在java中打开原子组?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-08 14:36:16

你似乎误解了http://www.regular-expressions.info/atomic.html的例子

您需要理解原子组的目的是防止回溯,因此不可能更改已经匹配的子字符串和新的子字符串。但在第一次交替情况下不能找到匹配,然后再测试下一次交替情况是可以的。

所以对于字符串abd和regex a(?>bc|b)c

代码语言:javascript
复制
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的正则表达式,您将得到

代码语言:javascript
复制
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

代码语言:javascript
复制
a(?>bc|b)c
         ^

无法匹配您将看到false"abc".matches("a(?>bc|b)c")的结果

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24107034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档