快速入門
教學
工具與語言
範例
參考
書籍評論
正規表示式參考
簡介
目錄
快速參考
字元
基本功能
字元類別
簡寫
錨點
字詞邊界
量詞
Unicode
擷取群組與反向參照
命名群組與反向參照
特殊群組
模式修改器
遞迴與平衡群組
取代參考
字元
配對文字與反向參照
內容與大小寫轉換
條件式
此網站的其他資訊
簡介
正規表示式快速入門
正規表示式教學
取代字串教學
應用程式與語言
正規表示式範例
正規表示式參考
取代字串參考
書籍評論
可列印 PDF
關於此網站
RSS Feed 與部落格
RegexBuddy—Better than a regular expression reference!

正規表示式參考:模式修改器

模式修改器語法包含兩個在正規表示式風格中不同的元素。括號和問號用於將修改器新增至正規表示式。根據其在正規表示式中的位置和正規表示式風格,它可能會影響整個正規表示式或其一部分。如果某種風格支援至少一種修改器語法,則它也會支援一個或多個字母,這些字母可用於修改器內部以切換特定模式。如果它不支援,則會針對該風格的所有字母標示「不適用」。

如果某種風格支援模式修改器,但並不支援特定字母,則會標示為「否」。這並不表示該風格完全沒有此模式。該風格可能仍有此模式,但沒有選項可以將其關閉。模式也不一定預設為關閉。例如,在大部分正規表示式風格中,^$ 預設只會在字串的開頭和結尾配對。但在 Just Great Software 應用程式和 Ruby 中,它們預設會在每行的開頭和結尾配對。在 JGsoft 應用程式中,您可以使用 (?-m) 關閉此模式,而在 Ruby 中您完全無法關閉此模式。(?-m) 在 Ruby 中會影響點,而不是錨點。

下表只表示每種風格是否支援特定字母以切換特定模式。它並未表示預設值。

功能語法說明範例JGsoft .NET Java Perl PCRE PCRE2 PHP Delphi R JavaScript VBScript XRegExp Python Ruby std::regex Boost Tcl ARE POSIX BRE POSIX ERE GNU BRE GNU ERE Oracle XML XPath
模式修改器 (?letters) 在正規表示式的開頭 正規表示式開頭的模式修改器會影響整個正規表示式,並覆寫正規表示式外部設定的任何選項。 (?i)a 會比對 aA ECMA
模式修改器 (?letters) 在正規表示式的中間 正規表示式中間的模式修改器會影響整個正規表示式,並覆寫正規表示式外部設定的任何選項。 te(?i)st 會比對 testteSTTEstTEST
模式修改器 (?letters) 在正規表示式的中間 正規表示式中間的模式修改器只會影響修改器右邊的正規表示式部分。如果修改器用在群組內,它只會影響群組內修改器右邊的正規表示式部分。如果正規表示式或群組使用交替,修改器右邊的所有交替選項都會受到影響。 te(?i)st 會比對 testteST,但不會比對 TEstTEST ECMA
修改器群組 (?letters:regex) 非擷取群組,其修改器只會影響群組內的正規表示式部分。 te(?i:st) 會比對 testteST,但不會比對 TEstTEST 3.6ECMA
否定修改器 (?on-off)(?on-off:regex) 連字號前的修改器字母(如果有)會開啟,而連字號後的修改器字母會關閉。 (?i)te(?-i)st 會比對 testTEst,但不會比對 teSTTEST 不適用不適用3.6不適用ECMA不適用不適用不適用不適用不適用不適用不適用
重設修改器 (?^) 關閉所有選項。插入符號後面可以加上修飾符號,以重新開啟某些選項。 (?i)te(?^)st 會比對 testTEst,但不會比對 teSTTEST 5.1410.327.3.04.0.0不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
不區分大小寫 (?i) 開啟不區分大小寫。 (?i)a 會比對 aA 不適用不適用不適用ECMA不適用不適用不適用不適用不適用不適用不適用
區分大小寫 (?c) 開啟區分大小寫。 (?c)a 會比對 a,但不會比對 A 不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
自由間距 (?x) 開啟自由間距模式,以忽略正規表示式代碼之間的空白,並允許 # 註解。 (?x)a#b 會比對 a 不適用不適用不適用ECMA不適用不適用不適用不適用不適用不適用不適用
自由間距 (?xx) 開啟自由間距模式,以忽略正規表示式代碼之間的空白,並允許 # 註解,包括字元類別內外。 (?xx)[ a] 會比對 a,但不會比對   5.2610.307.3.04.0.0不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
精確間距 (?t) 開啟「緊密」或精確間距模式,將空白和 # 字元視為字面值。 (?t)a#b 會比對 a#b 不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
單行 (?s) 讓點符號比對所有字元,包括換行字元。 (?s).* 會在 ab\n\ndef 中比對 ab\n\ndef 不適用不適用不適用ECMA不適用不適用不適用不適用不適用不適用不適用
多行 (?m) ^$ 分別比對每一行的開頭和結尾。 (?m)^. 會在 ab\n\ndef 中比對 ad 不適用不適用不適用ECMA不適用不適用不適用不適用不適用不適用不適用
單行 (?m) 讓點符號比對所有字元,包括換行字元。 (?m).* 會在 ab\n\ndef 中比對 ab\n\ndef 不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
Tcl 單行 (?s) ^$ 僅在字串的開頭和結尾做比對。讓點號比對所有字元,包含換行字元。 (?s)^.{3} 僅比對 ab\nab\n\ndef 不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
Tcl 多行 (?m) ^$ 在每一行的開頭和結尾做比對。不允許點號和否定字元類別比對換行字元。 (?m)^. 會在 ab\n\ndef 中比對 ad 不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
Tcl 多行 (?n) ^$ 在每一行的開頭和結尾做比對。不允許點號和否定字元類別比對換行字元。 (?n)^. 比對 adab\n\ndef 不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
Tcl「部分」換行敏感 (?p) ^$ 僅在字串的開頭和結尾做比對。不允許點號和否定字元類別比對換行字元。 (?p)^.* 僅比對 abab\n\ndef 不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
Tcl「奇怪」換行敏感 (?w) ^$ 在每一行的開頭和結尾做比對。讓點號比對所有字元,包含換行字元。 (?w)^. 比對 a、第一個 \ndab\n\ndef 不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
明確擷取 (?n) 一般括號是非擷取群組,而非編號擷取群組。只有命名擷取群組實際會擷取。 (?n)(a|b)c(?:a|b)c 相同 5.2210.307.3.04.0.0不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
重複命名群組 (?J) 允許多個命名擷取群組共用相同名稱。 (?J)(?:(?'x'a)|(?'x'b))\k'x' 符合 aabb 6.75.2.0不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
非貪婪量詞 (?U) 切換 貪婪量詞和非貪婪量詞 的語法。強烈建議不要使用,因為它會混淆標準量詞語法的意義。 (?U)a* 是非貪婪的,而 (?U)a*? 是貪婪的 不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
UNIX 行 (?d) 當錨點符合換行符號,且點號不符合換行符號時,讓它們只辨識換行符號作為換行符號 (?dm)^.a\rb\nc 中符合 ac 不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
BRE (?b) 將正規表示式解釋為 POSIX BRE (?b)a\+ 符合 aaa 不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
ERE (?e) 將正規表示式解釋為 POSIX ERE (?e)[a\]+ 符合 a\a\a 不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
文字 (?q) 將正規表示式解釋為文字字串(不包含修飾符) (?q)[a\]+ 以文字方式符合 [a\]+ 不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
額外語法 (?X) 將以反斜線跳脫且未形成正規表示式記號的字母視為錯誤,而不是文字。 (?X)\q 是錯誤,而 (?-X)\q 符合 q 5.0.0–7.2.342.14.0–3.6.3不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
功能語法說明範例JGsoft .NET Java Perl PCRE PCRE2 PHP Delphi R JavaScript VBScript XRegExp Python Ruby std::regex Boost Tcl ARE POSIX BRE POSIX ERE GNU BRE GNU ERE Oracle XML XPath