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