本網站更多內容 |
簡介 |
正規表示式快速開始 |
正規表示式教學 |
替換字串教學 |
應用程式和語言 |
正規表示式範例 |
正規表示式參考 |
替換字串參考 |
書籍評論 |
可列印 PDF |
關於本網站 |
RSS Feed 和部落格 |
問號使正規表示式中的前一個標記為選用。 colou?r 比對 colour 和 color。問號稱為量詞。
你可以使用括號將多個標記群組在一起,並在閉括號後加上問號,讓多個標記為選用。例如: Nov(ember)? 比對 Nov 和 November。
您可以透過包含多個問號來撰寫一個符合多種替代方案的正規表示式。 Feb(ruary)? 23(rd)? 符合 February 23rd、February 23、Feb 23rd 和 Feb 23。
您也可以使用大括號來讓某些東西變成選配。 colou{0,1}r 和 colou?r 相同。 POSIX BRE 和 GNU 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 匹配 o,l 匹配 l,另一個 o 匹配 o。然後,引擎檢查 u 是否匹配 n。這失敗了。然而,問號告訴正規表示式引擎,不匹配 u 是可以接受的。因此,引擎跳到下一個正規表示式符號:r。但這也無法匹配 n。現在,引擎只能得出結論,整個正規表示式無法從 colonel 中的 c 開始匹配。因此,引擎重新開始嘗試將 c 匹配到 colonel 中的第一個 o。
經過一系列失敗後,c 匹配 color 中的 c,o、l 和 o 匹配後面的字元。現在,引擎檢查 u 是否匹配 r。這失敗了。再次:沒問題。問號允許引擎繼續使用 r。這匹配 r,引擎報告正規表示式成功匹配我們字串中的 color。
| 快速入門 | 教學 | 工具和語言 | 範例 | 參考 | 書籍評論 |
| 簡介 | 目錄 | 特殊字元 | 非列印字元 | 正規表示式引擎內部 | 字元類別 | 字元類別減法 | 字元類別交集 | 簡寫字元類別 | 點 | 錨點 | 字詞邊界 | 交替 | 可選項目 | 重複 | 群組 & 擷取 | 反向參照 | 反向參照,第 2 部分 | 命名群組 | 相對反向參照 | 分支重設群組 | 自由間距 & 註解 | Unicode | 模式修改器 | 原子群組 | 佔有量詞 | 前瞻 & 後顧 | 前瞻,第 2 部分 | 將文字保留在比對之外 | 條件 | 平衡群組 | 遞迴 | 子常式 | 無限遞迴 | 遞迴 & 量詞 | 遞迴 & 擷取 | 遞迴 & 反向參照 | 遞迴 & 回溯 | POSIX 方括號表示式 | 零長度比對 | 繼續比對 |
頁面網址:https://regular-expressions.dev.org.tw/optional.html
頁面最後更新:2019 年 11 月 22 日
網站最後更新:2024 年 3 月 15 日
版權所有 © 2003-2024 Jan Goyvaerts。保留所有權利。