所有格量词正则表达式的实际使用
Posted
技术标签:
【中文标题】所有格量词正则表达式的实际使用【英文标题】:Practical use of possessive quantifiers regex [duplicate] 【发布时间】:2018-06-28 15:42:04 【问题描述】:我了解.*
(贪婪量词)回溯并尝试找到匹配项。并且.*+
(占有量词)不会回溯。
但是我经常使用.*
和.\*?
但不知道何时使用.*+
。
谁能给出一个应该使用.*+
的情况或例子?
欢迎举例说明。
编辑:
我已经完成了理论部分,我再说一遍,我了解它是如何工作的。我只需要一个匹配所有格量词的例子 (.*+
)
【问题讨论】:
regular-expressions.info/possessive.html 对于那些标记可能重复的人,请注意我了解它们是如何工作的。我只是无法举出所有格量词的示例/实际使用 this answer 使用所有格量词来修复正则表达式(它与周围的原子组相同) @ArunGowdru “Possible Dup”包含.*+
的示例,并继续将其与其他示例进行深入对比。这是你想要的吗?
好的。我今天遇到了一个。 ***.com/questions/50286545/…
【参考方案1】:
有很多(依赖于正则表达式的)实现细节,所以很难概括这些东西。例如,使用^.*.+
,您将在字符串" "
上获得匹配项。使用^.*+.+
你不会。因为第一个匹配器已经吞下了整个空白字符串。
您可以在不希望正则表达式的下一部分意外匹配前面的一部分的任何情况下使用它。
您可以在https://regex101.com/ 使用 PCRE 设置进行测试
【讨论】:
你能举一个匹配的例子吗 .*+ ?这样我就可以解决了? 一个空字符串或任意数量的空格都会匹配。您不会注意到与.*
的区别
这是错误的。这里的两个正则表达式都会给出相同的结果。第一部分 .*
或 .*+
将匹配整个字符串。最终的.*
将没有可匹配的内容,但它不需要 匹配任何内容。
@Yay295 感谢您指出这一点,我写错了正则表达式。我确定了答案。【参考方案2】:
请注意,如果所有格模式匹配,那么贪婪模式也会匹配。反之则不成立。因此,如果您想将匹配限制在较小的集合中,可以使用所有格量词。
当输入字符串与您的模式不匹配时,第二个所有格量词很有用。由于他们“吃掉”他们的输入并且不回溯,他们将更快地检测到不匹配。在极端情况下,这被称为 catastrophic backtracking 并导致网站瘫痪(包括 ***,请参阅 here)。
【讨论】:
以上是关于所有格量词正则表达式的实际使用的主要内容,如果未能解决你的问题,请参考以下文章