gpt4 book ai didi

regex - 使用否定字符类在内部如何工作(无需回溯)?

转载 作者:行者123 更新时间:2023-12-01 16:27:52 32 4
gpt4 key购买 nike

我读到要停止在正则表达式中回溯,可以使用否定字符类。就像我们想匹配 <Em>This <Em>is the shiz <Em> ,我们可以使用<[^>]+>这比 <.+?> 更快因为后者在每个字符之后回溯,而前者根本不回溯。
有人可以解释一下 <[^>]+> 内部如何匹配吗?

最佳答案

您必须首先了解贪婪量词和惰性量词如何工作。

惰性量词将测试每个字符后面的子模式(示例中的 > )是否匹配。贪婪量词将获取所有可能的字符,并且只有在需要时才会回溯以使下一个子模式(示例中的 > )匹配。

但是,如果您使用不包含字符 > 的否定字符类,而不是点(匹配除换行符之外的所有内容)。 ,你肯定不会有回溯的步骤。我希望说清楚!

为了说明我所说的,我建议您使用http://regex101.com的调试器尝试这三种模式。 :<.*> , <.*?> , <[^>]*>使用此字符串:<abcd efgh="ijkl" mnop="qrst"> lapin

特别是关于 PCRE:PCRE 库默认通过自动内部优化进行编译。如果您使用否定字符类并后跟排除的字符,则量词会自动转换为所有格量词。此功能只能在编译时更改。 (source)。 Perl 大概也是这样。

关于regex - 使用否定字符类在内部如何工作(无需回溯)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23662454/

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