快速開始
教學
工具和語言
範例
參考
書籍評論
正規表示式教學
簡介
目錄
特殊字元
不可列印字元
正規表示式引擎內部
字元類別
字元類別減法
字元類別交集
簡寫字元類別
錨點
字詞邊界
交替
選用項目
重複
群組和擷取
反向參照
反向參照,第 2 部分
命名群組
相對反向參照
分支重設群組
自由間距和註解
Unicode
模式修改器
原子群組
獨佔量詞
前瞻和後顧
環顧,第 2 部分
將文字排除在比對之外
條件式
平衡群組
遞迴
子常式
無限遞迴
遞迴和量詞
遞迴和擷取
遞迴和反向參照
遞迴和回溯
POSIX 方括號表示式
零長度比對
持續比對
本網站更多內容
簡介
正規表示式快速開始
正規表示式教學
替換字串教學
應用程式和語言
正規表示式範例
正規表示式參考
替換字串參考
書籍評論
可列印 PDF
關於本網站
RSS Feed 和部落格
RegexBuddy—Better than a regular expression tutorial!

選用項目

問號使正規表示式中的前一個標記為選用。 colou?r 比對 colourcolor。問號稱為量詞。

你可以使用括號將多個標記群組在一起,並在閉括號後加上問號,讓多個標記為選用。例如: Nov(ember)? 比對 NovNovember

您可以透過包含多個問號來撰寫一個符合多種替代方案的正規表示式。 Feb(ruary)? 23(rd)? 符合 February 23rdFebruary 23Feb 23rdFeb 23

您也可以使用大括號來讓某些東西變成選配。 colou{0,1}rcolou?r 相同。 POSIX BREGNU BRE 不支援這兩種語法。這些類型需要反斜線來賦予大括號其特殊意義:colou\{0,1\}r

重要的正規表示式概念:貪婪

問號是本教學課程介紹的第一個貪婪的元字元。問號給予正規表示式引擎兩個選擇:嘗試符合問號所套用的部分,或不嘗試符合它。引擎總是會嘗試符合該部分。只有當這會導致整個正規表示式失敗時,引擎才會嘗試忽略問號所套用的部分。

效果是,如果您將正規表示式 Feb 23(rd)? 套用於字串 Today is Feb 23rd, 2003,符合的結果永遠是 Feb 23rd,而不是 Feb 23。您可以在第一個問號後加上第二個問號,讓問號變成懶惰(即關閉貪婪)。

關於其他 重複 運算子的討論,有更多關於貪婪和懶惰量詞的詳細資訊。

深入了解正規表示式引擎

讓我們將正規表示式 colou?r 套用於字串 The colonel likes the color green

正規表示式中的第一個符號是 字面 c。它成功匹配的第一個位置是 colonel 中的 c。引擎繼續運作,發現 o 匹配 ol 匹配 l,另一個 o 匹配 o。然後,引擎檢查 u 是否匹配 n。這失敗了。然而,問號告訴正規表示式引擎,不匹配 u 是可以接受的。因此,引擎跳到下一個正規表示式符號:r。但這也無法匹配 n。現在,引擎只能得出結論,整個正規表示式無法從 colonel 中的 c 開始匹配。因此,引擎重新開始嘗試將 c 匹配到 colonel 中的第一個 o。

經過一系列失敗後,c 匹配 color 中的 colo 匹配後面的字元。現在,引擎檢查 u 是否匹配 r。這失敗了。再次:沒問題。問號允許引擎繼續使用 r。這匹配 r,引擎報告正規表示式成功匹配我們字串中的 color