佔有量詞的基本用法
佔有量詞是許多正規表示式中的另一類量詞,它允許對給定令牌進行有效的回溯。這有助於提高效能,並在某些情況下防止匹配。
通過在量詞之後新增+
,可以將佔有量詞的類別與懶惰或貪婪量詞區分開來,如下所示:
量詞 | 貪婪 | 懶 | 所有格 |
---|---|---|---|
零或更多 | * |
*? |
*+ |
一個或多個 | + |
+? |
++ |
零或一 | ? |
?? |
?+ |
例如,考慮兩個模式 .*
和 .*+
,在字串 "abc"d
上執行。在這兩種情況下,字串開頭的 "
都匹配,但在此之後,這兩種模式將具有不同的行為和結果。
然後,貪婪的量詞將扼殺其餘的弦,abc"d
。因為這與模式不匹配,所以它將回溯並丟棄 d
,留下包含 abc"
的量詞。因為這仍然與模式不匹配,量詞會降低 "
,只留下 abc
。這與模式匹配(因為 "
由文字而不是量詞匹配),正規表示式報告成功。
佔有量詞也會扼殺字串的其餘部分,但是,與貪婪的量詞不同,它不會回溯。由於其內容 abc"d
不允許匹配模式的其餘部分,正規表示式將停止並報告失敗匹配。
因為佔有量詞不進行回溯,所以它們可以導致長或複雜模式的顯著效能提升。然而,如果人們不知道量詞如何在內部工作,它們就會變得危險(如上所述)。