gpt4 book ai didi

java - 针对懒惰或贪婪的正则表达式所有格量词

转载 作者:行者123 更新时间:2023-11-29 09:34:49 25 4
gpt4 key购买 nike

谁能一步一步地向我解释为什么正则表达式会失败:

<.++>

与此字符串进行比较:<em>

使用惰性或贪婪量词找到相同的字符串,但在这种情况下涉及哪些步骤?

我使用 Java 正则表达式风格。

最佳答案

来自Java Pattern documentation :

Possessive quantifiers, which greedily match as much as they can and do not back off, even when doing so would allow the overall match to succeed.

在您的示例中,<在你的正则表达式中匹配 <在字符串中,然后是 .++匹配字符串的其余部分 em> .你还有一个 >在您的正则表达式中,但字符串中没有剩余字符可以匹配(因为 .++ 消耗了所有字符)。所以匹配失败。

如果量词是贪心的,即如果它是 .+而不是 .++ , 此时正则表达式引擎会尝试减少 .+ 匹配的部分一个字符,到 em , 然后再试一次。这次匹配会成功,因为会有一个 >。留在 > 的字符串中在正则表达式中进行匹配。

编辑:惰性量词的工作方式与贪婪量词相反。惰性量词不是从尝试匹配整个字符串的其余部分并逐个字符退出,而是从尝试匹配单个字符开始,在本例中只是 e。 .如果这不允许完整的正则表达式匹配(它不会在这里,因为你在正则表达式中有 > 试图匹配字符串中的 m),惰性量词将向上移动以匹配两个字符,em .然后 >在正则表达式中将与 > 对齐在字符串中,匹配就会成功。但是,如果它没有成功,惰性量词将移动到三个字符,依此类推。

关于java - 针对懒惰或贪婪的正则表达式所有格量词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3253134/

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