Regex 量詞
量詞建構
量詞會指定比對前面的規則運算式結構的頻率。量詞的種類有︰
- 貪心
- 不情願
- 所有格式
貪心、不情願和所有格量詞的區別在於,初次比對要嘗試使用字串的哪一部分,以及在初次比對未成功時如何重試。
量詞預設為
「貪心」
。貪心量詞會先嘗試使用整個輸入字串進行比對。如果這產生了相符,則認為比對成功,且引擎可移至規則運算式中的下一個結構。如果第一次嘗試未產生相符項目,引擎會一次後退一個字元,直到找到相符項目為止。因此,貪心量詞會按從最長輸入字串到最短輸入字串的順序檢查可能的相符項目,並從右向左循環嘗試。新增
?
在貪心量詞上加上問號 (問號),就 不會在
。不情願量詞會先從輸入字串的開頭嘗試進行比對,從符合 regex 結構的盡可能短的字串開始。如果這產生了相符,則認為比對成功,且引擎可移至規則運算式中的下一個結構。如果第一次嘗試未產生相符項目,引擎會一次新增 1 個字元,直到找到相符項目為止。因此,不情願量詞會按從最短的輸入字串到最長的輸入字串的順序檢查可能的相符項目,並從左到右以遞回方式嘗試。新增
+
在貪心量詞上加上「」(加號), 所有格
變成「」。所有格量詞在第一次嘗試時類似於貪心量詞 (它會嘗試與整個輸入字串進行配對)。不同之處在於,所有格量詞與貪心量詞不同,在找不到相符項目時,不會重試較短的字串。如果初次比對失敗,所有格量詞都會報告為失敗的所有格比對。不再進行任何嘗試。貪心建構 | 不情願構裝 | 所有格結構式 | 說明 | 範例 |
|---|---|---|---|---|
?
| ??
| ?+
| 比對前一個字元或構想一次,或完全不比對。 | st?on 比對「johnson」中的「son」和「johnston」中的「ston」,但在「clinton」或「version」中不匹配任何內容 |
*
| *?
| *+
| 比對前一個字元或結構零次或多次。 | if* 與「if」、「diff」中的「iff」或「print」中的「i」相符 |
+
| +?
| ++
| 比對前一個字元或構想 1 次以上。 | if+ 與「diff」中的「if」、「iff」相符,但在「print」中不相符 |
{n}
| {n}?
| {n}+
| 比對前一個字元或結構,且僅匹配 n 次。 | o{2} 比對「lookup」中的「oo」和「fooooo」中的前 2 個 o,但與「mount」中的任何內容都不相符 |
{n,}
| {n,}?
| {n,}+
| 比對前一個字元或結構至少 n 次。 | o{2,} 在「lookup」中與「foo」中的所有 5 個 o 相符,但在「mount」中不相符 |
{n,m}
| {n,m}?
| {n,m}+
| 比對前一個字元或構想至少 n 次,但不超過 m 次。 | F{2,4} 與「#FF0000」中的「FF」和「#FFFFFF」中的最後 4 個 F 相符 |