gpt4 book ai didi

java - 所有格量词究竟是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 23:05:47 25 4
gpt4 key购买 nike

在页面末尾尝试解释贪婪、不情愿和所有格量词的工作原理:http://docs.oracle.com/javase/tutorial/essential/regex/quant.html

但是我自己试了一个例子,但我似乎没有完全理解它。

我直接贴上我的结果:

Enter your regex: .*+foo
Enter input string to search: xfooxxxxxxfoo
No match found.

Enter your regex: (.*)+foo
Enter input string to search: xfooxxxxxxfoo
I found the text "xfooxxxxxxfoo" starting at index 0 and ending at index 13.

为什么第一个reg.exp。找不到匹配项,第二个呢?这 2 个 reg.exp. 之间的确切区别是什么?

最佳答案

另一个量词之后的 + 表示“不允许正则表达式引擎回溯到前一个标记匹配的任何内容”。 (请参阅此处关于 possessive quantifiers 的教程)。

因此,当您将 .*foo 应用于 "xfooxxxxxxfoo" 时,.* 首先匹配整个字符串。然后,由于 foo 无法匹配,正则表达式引擎回溯直到可能,当 .* 匹配 "xfooxxxxxx" 时实现匹配并且 foo 匹配了 "foo"

现在附加的 + 阻止了回溯的发生,所以匹配失败。

当您编写 (.*)+foo 时。 + 具有完全不同的含义;现在它的意思是“一个或多个前面的标记”。顺便说一句,您已经创建了嵌套量词,这不是一个好主意。如果将该正则表达式应用于 "xfoxxxxxxxxxfox" 之类的字符串,您将遇到 catastrophic backtracking .

关于java - 所有格量词究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20425260/

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