gpt4 book ai didi

java - 如何使原子组与java正则表达式中的交替一起工作?

转载 作者:行者123 更新时间:2023-12-02 05:45:29 25 4
gpt4 key购买 nike

我看过原子组的简单演示。正则表达式:

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中开启原子组?

最佳答案

您似乎误解了 http://www.regular-expressions.info/atomic.html 中的示例

您需要了解原子组的目的是防止回溯,因此不可能用新的子字符串更改已匹配子字符串。但是第一个交替情况不会找到匹配,那么可以测试下一个交替情况。

对于字符串abd和正则表达式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 和字符串 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")

的结果>

关于java - 如何使原子组与java正则表达式中的交替一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24107034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com