占有量词的基本用法
占有量词是许多正则表达式中的另一类量词,它允许对给定令牌进行有效的回溯。这有助于提高性能,并在某些情况下防止匹配。
通过在量词之后添加+
,可以将占有量词的类别与懒惰或贪婪量词区分开来,如下所示:
量词 | 贪婪 | 懒 | 所有格 |
---|---|---|---|
零或更多 | * |
*? |
*+ |
一个或多个 | + |
+? |
++ |
零或一 | ? |
?? |
?+ |
例如,考虑两个模式 .*
和 .*+
,在字符串 "abc"d
上运行。在这两种情况下,字符串开头的 "
都匹配,但在此之后,这两种模式将具有不同的行为和结果。
然后,贪婪的量词将扼杀其余的弦,abc"d
。因为这与模式不匹配,所以它将回溯并丢弃 d
,留下包含 abc"
的量词。因为这仍然与模式不匹配,量词会降低 "
,只留下 abc
。这与模式匹配(因为 "
由文字而不是量词匹配),正则表达式报告成功。
占有量词也会扼杀字符串的其余部分,但是,与贪婪的量词不同,它不会回溯。由于其内容 abc"d
不允许匹配模式的其余部分,正则表达式将停止并报告失败匹配。
因为占有量词不进行回溯,所以它们可以导致长或复杂模式的显着性能提升。然而,如果人们不知道量词如何在内部工作,它们就会变得危险(如上所述)。