正規表示式參考 |
簡介 |
目錄 |
快速參考 |
字元 |
基本功能 |
字元類別 |
速記 |
錨點 |
字詞邊界 |
量詞 |
Unicode |
擷取群組和反向參照 |
命名群組和反向參照 |
特殊群組 |
模式修改器 |
遞迴和平衡群組 |
替換參考 |
字元 |
符合文字和反向參照 |
內容和大小寫轉換 |
條件式 |
本網站更多資訊 |
簡介 |
正規表示式快速入門 |
正規表示式教學 |
替換字串教學 |
應用程式和語言 |
正規表示式範例 |
正規表示式參考 |
替換字串參考 |
書籍評論 |
可列印 PDF |
關於本網站 |
RSS Feed 和部落格 |
功能 | 語法 | 說明 | 範例 | 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 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
平衡群組 | (?<capture-subtract>regex) 其中「capture」和「subtract」是群組名稱,而「regex」是任何正規表示式 | 「subtract」名稱必須用於正規表示式中其他位置的擷取群組名稱。如果這個群組已擷取尚未減掉的符合項,則平衡群組會從「subtract」中減去一個擷取,嘗試符合「regex」,並將其符合項儲存在群組「capture」中。如果省略「capture」,則會發生相同情況,但不會儲存符合項。如果省略「regex」,則平衡群組會成功,但不會前進字串。如果群組「subtract」沒有符合項可以減去,則平衡群組會無法符合,無論是否指定「regex」。 | ^(?<l>\w)+\w? (\k<l>(?<-l>))+ (?(l)(?!))$ 符合任何迴文單字 |
V2 | YES | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no |
平衡群組 | (?'capture-subtract'regex) 其中「capture」和「subtract」是群組名稱,而「regex」是任何正規表示式 | 「subtract」名稱必須用於正規表示式中其他位置的擷取群組名稱。如果這個群組已擷取尚未減掉的符合項,則平衡群組會從「subtract」中減去一個擷取,嘗試符合「regex」,並將其符合項儲存在群組「capture」中。如果省略「capture」,則會發生相同情況,但不會儲存符合項。如果省略「regex」,則平衡群組會成功,但不會前進字串。如果群組「subtract」沒有符合項可以減去,則平衡群組會無法符合,無論是否指定「regex」。 | ^(?'l'\w)+\w? (\k'l'(?'-l'))+ (?(l)(?!))$ 符合任何迴文單字 |
V2 | YES | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no |
遞迴 | (?R) | 整個正規表示式的遞迴。 | a(?R)?z 符合 az、aazz、aaazzz 等。 | V2 | no | no | 5.10 | YES | YES | YES | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
遞迴 | (?0) | 整個正規表示式的遞迴。 | a(?0)?z 符合 az、aazz、aaazzz 等。 | V2 | no | no | 5.10 | YES | YES | YES | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
遞迴 | \g<0> | 整個正規表示式的遞迴。 | a\g<0>?z 符合 az、aazz、aaazzz 等。 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 2.0 | no | no | no | no | no | no | no | no | no | no |
遞迴 | \g'0' | 整個正規表示式的遞迴。 | a\g'0'?z 符合 az、aazz、aaazzz 等。 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 2.0 | no | no | no | no | no | no | no | no | no | no |
子常式呼叫 | (?1) 其中 1 是擷取群組的編號 | 擷取群組的遞迴或子常式呼叫至擷取群組。 | a(b(?1)?y)z 符合 abyz、abbyyz、abbbyyyz 等。 | V2 | no | 僅 4 | 5.10 | YES | YES | YES | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
子常式呼叫 | \g<1>,其中 1 是擷取群組的編號 | 擷取群組的遞迴或子常式呼叫至擷取群組。 | a(b\g<1>?y)z 符合 abyz、abbyyz、abbbyyyz 等 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 1.9 | no | no | no | no | no | no | no | no | no | no |
子常式呼叫 | \g'1',其中 1 是擷取群組的編號 | 擷取群組的遞迴或子常式呼叫至擷取群組。 | a(b\g'1'?y)z 符合 abyz、abbyyz、abbbyyyz 等 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 1.9 | no | no | no | no | no | no | no | no | no | no |
相對子常式呼叫 | (?-1),其中 -1 是負整數 | 遞迴或子常式呼叫到擷取群組,可透過計算從右到左從子常式呼叫開始,指定數量命名或編號擷取群組的開啟括號來找出。 | a(b(?-1)?y)z 符合 abyz、abbyyz、abbbyyyz 等 | V2 | no | no | 5.10 | 7.2 | YES | 5.2.4 | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
相對子常式呼叫 | \g<-1>,其中 -1 是負整數 | 遞迴或子常式呼叫到擷取群組,可透過計算從右到左從子常式呼叫開始,指定數量命名或編號擷取群組的開啟括號來找出。 | a(b\g<-1>?y)z 符合 abyz、abbyyz、abbbyyyz 等 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 1.9 | no | no | no | no | no | no | no | no | no | no |
相對子常式呼叫 | \g'-1',其中 -1 是負整數 | 遞迴或子常式呼叫到擷取群組,可透過計算從右到左從子常式呼叫開始,指定數量命名或編號擷取群組的開啟括號來找出。 | a(b\g'-1'?y)z 符合 abyz、abbyyz、abbbyyyz 等 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 1.9 | no | no | no | no | no | no | no | no | no | no |
前向子常式呼叫 | (?+1),其中 +1 是正整數 | 遞迴或子常式呼叫到擷取群組,可透過計算從左到右從子常式呼叫開始,指定數量命名或編號擷取群組的開啟括號來找出。 | (?+1)x([ab]) 符合 axa、axb、bxa 和 bxb | V2 | no | no | 5.10 | 7.2 | YES | 5.2.4 | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
前向子常式呼叫 | \g<+1>,其中 +1 為正整數 | 遞迴或子常式呼叫到擷取群組,可透過計算從左到右從子常式呼叫開始,指定數量命名或編號擷取群組的開啟括號來找出。 | \g<+1>x([ab]) 符合 axa、axb、bxa 和 bxb | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 2.0 | no | no | no | no | no | no | no | no | no | no |
前向子常式呼叫 | \g'+1',其中 +1 為正整數 | 遞迴或子常式呼叫到擷取群組,可透過計算從左到右從子常式呼叫開始,指定數量命名或編號擷取群組的開啟括號來找出。 | \g'+1'x([ab]) 符合 axa、axb、bxa 和 bxb | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 2.0 | no | no | no | no | no | no | no | no | no | no |
命名子常式呼叫 | (?&name),其中「name」為擷取群組的名稱 | 擷取群組的遞迴或子常式呼叫至擷取群組。 | a(?<x>b(?&x)?y)z 符合 abyz、abbyyz、abbbyyyz 等 | V2 | no | no | 5.10 | 7.0 | YES | 5.2.2 | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
命名子常式呼叫 | (?P>name),其中「name」為擷取群組的名稱 | 擷取群組的遞迴或子常式呼叫至擷取群組。 | a(?P<x>b(?P>x)?y)z 符合 abyz、abbyyz、abbbyyyz 等 | V2 | no | no | 5.10 | YES | YES | YES | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
命名子常式呼叫 | \g<name>,其中「name」為擷取群組的名稱 | 擷取群組的遞迴或子常式呼叫至擷取群組。 | a(?<x>b\g<x>?y)z 符合 abyz、abbyyz、abbbyyyz 等 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 1.9 | no | no | no | no | no | no | no | no | no | no |
命名子常式呼叫 | \g'name',其中「name」為擷取群組的名稱 | 擷取群組的遞迴或子常式呼叫至擷取群組。 | a(?'x'b\g'x'?y)z 符合 abyz、abbyyz、abbbyyyz 等 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 1.9 | no | no | no | no | no | no | no | no | no | no |
子常式定義 | (?(DEFINE)regex),其中「regex」為任意正規表示式 | DEFINE 群組不參與比對程序。可以在 DEFINE 群組內對擷取群組進行子常式呼叫。 | (?(DEFINE)([ab])) x(?1)y(?1)z 符合 xayaz、xaybz、xbyaz 和 xbybz |
V2 | no | no | 5.10 | 7.0 | YES | 5.2.2 | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
子常式呼叫擷取 | 使用 Ruby 風格 \g 語法進行子常式呼叫 | 對擷取群組的子常式呼叫會讓該擷取群組儲存子常式呼叫期間符合的文字。 | 當 ([ab])\g'1' 符合 ab 時,第一個擷取群組會在符合後儲存 b。 | V2 | 不適用 | 不適用 | 不適用 | no | no | no | no | no | 不適用 | 不適用 | 不適用 | 不適用 | 1.9 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 |
子常式呼叫擷取 | 使用 \g 以外的語法進行子常式呼叫 | 對擷取群組的子常式呼叫會讓該擷取群組儲存子常式呼叫期間符合的文字。 | 當 ([ab])(?1) 符合 ab 時,第一個擷取群組會在符合後儲存 b。 | no | 不適用 | no | no | no | no | no | no | no | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | no | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 |
遞迴隔離擷取群組 | 任何遞迴或子常式呼叫 | 每個子常式呼叫都有自己的擷取群組獨立儲存空間。呼叫中的反向參照無法看到呼叫之前的符合文字,呼叫之後的反向參照也無法看到呼叫中的符合文字。遞迴中的反向參照無法看到其他遞迴層級的符合文字。 | (a)(\1)(?2) 永遠不會符合任何東西,因為 \1 總會在 (?2) 進行的呼叫中失敗。 | no | 不適用 | no | 5.10–5.18 | no | no | no | no | no | 不適用 | 不適用 | 不適用 | 不適用 | no | 不適用 | no | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 |
遞迴還原擷取群組 | 使用 Ruby 風格 \g 語法的遞迴或子常式呼叫 | 當正規表示式引擎退出遞迴或子常式呼叫時,它會將所有擷取群組還原為進入遞迴或子常式呼叫之前符合的文字。 | 當 (a)(([bc])\1)\g'2' 符合 abaca 時,第三個群組會在符合後儲存 b | no | 不適用 | 不適用 | 不適用 | 7.7 | YES | 5.2.7 | YES | YES | 不適用 | 不適用 | 不適用 | 不適用 | no | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 |
遞迴還原擷取群組 | 使用 \g 以外的語法進行遞迴或子常式呼叫 | 當正規表示式引擎退出遞迴或子常式呼叫時,它會將所有擷取群組還原為進入遞迴或子常式呼叫之前符合的文字。 | 當 (a)(([bc])\1)(?2) 比對 abaca 時,第三個群組會在比對後儲存 b | V2 | 不適用 | no | 5.10 | YES | YES | YES | YES | YES | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | ECMA 1.42–1.83 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 |
遞迴不會孤立或還原擷取群組 | 使用 Ruby 風格 \g 語法的遞迴或子常式呼叫 | 遞迴和子常式呼叫不會對擷取群組給予任何特殊處理,除了子常式呼叫會擷取之外。反向參照總是會看到每個擷取群組最近比對到的文字,無論它們是否在同層遞迴中。 | 當 (a)(([bc])\1)\g'2' 比對 abaca 時,第三個群組會在比對後儲存 c | V2 | 不適用 | 不適用 | 不適用 | no | no | no | no | no | 不適用 | 不適用 | 不適用 | 不適用 | 1.9 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 |
遞迴不會孤立或還原擷取群組 | 使用 \g 以外的語法進行遞迴或子常式呼叫 | 遞迴和子常式呼叫不會對擷取群組給予任何特殊處理,除了子常式呼叫會擷取之外。反向參照總是會看到每個擷取群組最近比對到的文字,無論它們是否在同層遞迴中。 | 當 (a)(([bc])\1)(?2) 比對 abaca 時,第三個群組會在比對後儲存 c | no | 不適用 | 僅 4 | no | no | no | no | no | no | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | no | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 |
遞迴是原子的 | 使用 (?P>…) 的遞迴或子常式呼叫 | 遞迴和子常式呼叫是原子的。一旦正規表示式引擎退出它們,它就不會回溯到它們中嘗試遞迴或子常式呼叫的不同排列。 | (a+)(?P>1)(?P>1) 永遠無法比對任何東西,因為第一個 (?P>1) 比對所有剩下的 a,而當第二個失敗時,正規表示式引擎不會回溯到第一個 (?P>1) | V2 | 不適用 | 不適用 | no | 6.5 | 10.00–10.23 | 5.1.3–7.2.34 | YES | 2.14.0–3.6.3 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | no | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 |
遞迴是原子的 | 使用 (?P>0) 以外的語法遞迴整個正規表示式 | 整個正規表示式的遞迴是原子的。一旦正規表示式引擎退出遞迴,它就不會回溯到它中嘗試遞迴的不同排列。 | aa$|a(?R)a|a 在遞迴為原子的情況下,會在 aaa 中比對 a;否則它會比對整個字串。 | no | 不適用 | 不適用 | no | 6.5 | YES | 5.1.3–7.2.34 | YES | YES | 不適用 | 不適用 | 不適用 | 不適用 | no | 不適用 | ECMA 1.42–1.83 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 |
遞迴是原子的 | 使用語法呼叫子常式,而非 (?P>…) | 子常式呼叫是原子性的。一旦正規表示式引擎從中退出,它就不會回溯到其中嘗試子常式呼叫的不同排列。 | (a+)(?1)(?1) 永遠無法配對任何東西,因為第一個 (?1) 配對所有剩下的 a,而當第二個失敗時,正規表示式引擎不會回溯到第一個 (?1) | no | 不適用 | 僅 4 | no | 6.5 | 10.00–10.23 | 5.1.3–7.2.34 | YES | 2.14.0–3.6.3 | 不適用 | 不適用 | 不適用 | 不適用 | no | 不適用 | no | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 |
功能 | 語法 | 說明 | 範例 | 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 |
| 快速開始 | 教學 | 工具和語言 | 範例 | 參考 | 書籍評論 |
| 簡介 | 目錄 | 快速參考 | 字元 | 基本功能 | 字元類別 | 速記 | 錨點 | 字元邊界 | 量詞 | Unicode | 擷取群組和反向參考 | 命名群組和反向參考 | 特殊群組 | 模式修改器 | 遞迴和平衡群組 |
頁面網址:https://regular-expressions.dev.org.tw/refrecurse.html
頁面最後更新:2023 年 10 月 16 日
網站最後更新:2024 年 3 月 15 日
版權所有 © 2003-2024 Jan Goyvaerts。保留所有權利。