有人能向我解释一下“Possessive Quantifiers”吗?(正则表达式)

17

我正在阅读PCRE文档,它提到了"possessive quantifiers",但并没有明确定义它们。我知道什么是贪婪量词和懒惰量词,但"possessive"是什么意思呢?

看起来PCRE手册在使用这个术语时并没有对其进行定义,有点作弊的感觉。手册明确声明术语"possessive quantifiers"最初是在Friedl的书中定义的。很好,但我没有Friedl的书,在阅读手册时,我无法从字里行间找出区分占有量词和贪婪量词的方法。

  • ?=表示0或1次,贪婪
  • ??=表示0或1次,懒惰
  • ?+=表示0或1次,占有
  • '+'=表示1或多次,贪婪
  • +?=表示1或多次,懒惰
  • ++=表示1或多次,占有

这个问题已经被加入到Stack Overflow正则表达式FAQ,位于“量词 > 更多差异”的部分。 - aliteralmind
1个回答

14
也许最好的起点是正则表达式教程-占有量词:
引用: 当讨论重复操作符或量词时,我解释了贪婪和懒惰重复之间的区别。贪婪和懒惰决定了正则表达式引擎尝试正则表达式模式的可能排列的顺序。贪婪量词将首先尝试尽可能多地重复标记,然后随着引擎回溯以查找整体匹配而逐渐放弃匹配。懒惰量词将首先根据需要尽可能少地重复标记,然后随着引擎回溯整个正则表达式以查找整体匹配而逐渐扩展匹配。
引用: 占有量词是一种防止正则表达式引擎尝试所有排列的方法。这主要有助于提高性能。您还可以使用占有量词来消除某些匹配项。

10
啊,我明白了!在阅读了那篇教程之后,我认为懒惰并不是贪婪的反义词。或许应该把懒惰称作“慷慨”,而所有格形式实际上应该被称为“懒惰”,因为所有格量词拒绝回溯。它们不会做任何额外的工作,这就是可恶的懒惰。 - Cheeso
6
所有格量词拒绝回溯 - 这是我读过的最好的解释。谢谢您对它进行了总结 :) - vondip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接