gpt4 book ai didi

java - 正则表达式反向引用如何工作

转载 作者:行者123 更新时间:2023-12-01 11:41:23 25 4
gpt4 key购买 nike

我知道,如果发生回溯,则反向引用 ovverride 值,并且 ovverided 输出将是新的反向引用。

但是如果我以这个正则表达式为例:

([abc]+).*\1

然后是字符串:“abc me bca”

输出是:“abc me bca”

有人可以解释一下这怎么可能吗,因为按照步骤:

-[abc] matches a from the input.

-because their is an quantifier + so it will repeate one or more
time and again matches b and c.then stops at whitespace as it's
not either 'a', 'b' or 'c'.

-.* eats all the input string after abc and further goes
to \1(the backreference).

- .* will do backtracking as \1 fails and because .* i.e zero
or more so it will through all the charecters and again the +
of [abc]+ will do backtracking.

-in backtracking of [abc]+ it will be do until 'a' after
removing 'b' and 'c' but still their is no match for
\1 as bca.

那么输出是如何变成“abc me bca”的..?

最佳答案

第一个字符是 a,最后一个字符是 a。所以它是匹配的。

发生的情况是在组中捕获abc,然后与bca进行比较。它失败了。

所以引擎回溯1。现在ab将与ca进行比较。它失败了。所以引擎

将再次回溯。a与最后一个a进行比较并且通过。所以最终引擎

a存储在组中,因为它满足匹配条件。注意\1是得到的

存储在第一组中。它不是一个固定值。请参见演示。

https://regex101.com/r/sJ9gM7/72

关于java - 正则表达式反向引用如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29498127/

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