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

在正規表示式中指定模式

通常,比對模式會在正規表示法外指定。在程式語言中,您可以將它們作為標記傳遞給正規表示法建構函式,或附加到正規表示法文字。在應用程式中,您會切換適當的按鈕或核取方塊。您可以在本網站的工具和語言區段中找到詳細資訊。

有時,工具或語言不提供指定比對選項的功能。在Java中方便的String.matches()方法不採用比對選項參數,例如Pattern.compile()。或者,正規表示法風格可能支援未顯示為外部標記的比對模式。在R中的正規表示法函式具有ignore.case作為其唯一選項,即使基礎PCRE函式庫具有比本教學課程中討論的任何其他函式庫更多的比對模式。

在這些情況下,您可以將下列模式修改器新增到正規表示法的開頭。若要指定多個模式,只需將它們放在一起,如(?ismx)

僅對正規表示式的一部分開啟和關閉模式

現代正規表示式風格允許您僅對正規表示式的一部分套用修改器。如果您在正規表示式的中間插入修改器 (?ism),則修改器僅套用於修改器右方的正規表示式部分。使用這些風格,您可以透過在減號前面加上減號來關閉模式。減號後的全部模式都會關閉。例如,(?i-sm) 會開啟不區分大小寫,並關閉單行模式和多行模式。

如果一種風格無法對正規表示式的一部分套用修改器,則它會將正規表示式中間的修改器視為錯誤。 Python 是此規則的例外。在 Python 中,將修改器放在正規表示式中間會影響整個正規表示式。因此,在 Python 中,(?i)不區分大小寫不區分大小寫(?i) 都不區分大小寫。在所有其他風格中,尾隨模式修改器不具任何效果或會變成錯誤。

你可以快速測試你正在使用的正則表達式風味如何處理模式修飾符。正則表達式 (?i)te(?-i)st 應該會符合 testTEst,但不會符合 teSTTEST

修飾符範圍

與其使用兩個修飾符,一個用來開啟選項,一個用來關閉選項,你可以使用修飾符範圍。 (?i)caseless(?-i)cased(?i)caseless 等於 (?i)caseless(?-i:cased)caseless。這個語法類似於 非擷取群組 (?:group)。你可以將非擷取群組視為不會改變任何修飾符的修飾符範圍。但是,有些風味,例如 JavaScriptPythonTcl 支援非擷取群組,即使它們不支援修飾符範圍。與非擷取群組一樣,修飾符範圍不會建立 反向參照

修飾符範圍受到所有允許你在正規表達式中間使用模式修飾符的正則表達式風味支援,而且僅受到這些風味支援。這些風味包括 JGsoft 引擎.NETJavaPerlPCREPHPDelphiR