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

正規表示式參考:平衡群組、遞迴和子常式

功能語法說明範例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)(?!))$
符合任何迴文單字
V2YESnononononononononononononononononononononono
平衡群組 (?'capture-subtract'regex) 其中「capture」和「subtract」是群組名稱,而「regex」是任何正規表示式 「subtract」名稱必須用於正規表示式中其他位置的擷取群組名稱。如果這個群組已擷取尚未減掉的符合項,則平衡群組會從「subtract」中減去一個擷取,嘗試符合「regex」,並將其符合項儲存在群組「capture」中。如果省略「capture」,則會發生相同情況,但不會儲存符合項。如果省略「regex」,則平衡群組會成功,但不會前進字串。如果群組「subtract」沒有符合項可以減去,則平衡群組會無法符合,無論是否指定「regex」。 ^(?'l'\w)+\w?
(\k'l'(?'-l'))+
(?(l)(?!))$
符合任何迴文單字
V2YESnononononononononononononononononononononono
遞迴 (?R) 整個正規表示式的遞迴。 a(?R)?z 符合 azaazzaaazzz 等。 V2nono5.10YESYESYESYESYESnonononononoECMA
1.42–1.83
nononononononono
遞迴 (?0) 整個正規表示式的遞迴。 a(?0)?z 符合 azaazzaaazzz 等。 V2nono5.10YESYESYESYESYESnonononononoECMA
1.42–1.83
nononononononono
遞迴 \g<0> 整個正規表示式的遞迴。 a\g<0>?z 符合 azaazzaaazzz 等。 V2nonono7.7YES5.2.7YESYESnononono2.0nononononononononono
遞迴 \g'0' 整個正規表示式的遞迴。 a\g'0'?z 符合 azaazzaaazzz 等。 V2nonono7.7YES5.2.7YESYESnononono2.0nononononononononono
子常式呼叫 (?1) 其中 1 是擷取群組的編號 擷取群組的遞迴或子常式呼叫至擷取群組。 a(b(?1)?y)z 符合 abyzabbyyzabbbyyyz 等。 V2no僅 45.10YESYESYESYESYESnonononononoECMA
1.42–1.83
nononononononono
子常式呼叫 \g<1>,其中 1 是擷取群組的編號 擷取群組的遞迴或子常式呼叫至擷取群組。 a(b\g<1>?y)z 符合 abyzabbyyzabbbyyyz V2nonono7.7YES5.2.7YESYESnononono1.9nononononononononono
子常式呼叫 \g'1',其中 1 是擷取群組的編號 擷取群組的遞迴或子常式呼叫至擷取群組。 a(b\g'1'?y)z 符合 abyzabbyyzabbbyyyz V2nonono7.7YES5.2.7YESYESnononono1.9nononononononononono
相對子常式呼叫 (?-1),其中 -1 是負整數 遞迴或子常式呼叫到擷取群組,可透過計算從右到左從子常式呼叫開始,指定數量命名或編號擷取群組的開啟括號來找出。 a(b(?-1)?y)z 符合 abyzabbyyzabbbyyyz V2nono5.107.2YES5.2.4YESYESnonononononoECMA
1.42–1.83
nononononononono
相對子常式呼叫 \g<-1>,其中 -1 是負整數 遞迴或子常式呼叫到擷取群組,可透過計算從右到左從子常式呼叫開始,指定數量命名或編號擷取群組的開啟括號來找出。 a(b\g<-1>?y)z 符合 abyzabbyyzabbbyyyz V2nonono7.7YES5.2.7YESYESnononono1.9nononononononononono
相對子常式呼叫 \g'-1',其中 -1 是負整數 遞迴或子常式呼叫到擷取群組,可透過計算從右到左從子常式呼叫開始,指定數量命名或編號擷取群組的開啟括號來找出。 a(b\g'-1'?y)z 符合 abyzabbyyzabbbyyyz V2nonono7.7YES5.2.7YESYESnononono1.9nononononononononono
前向子常式呼叫 (?+1),其中 +1 是正整數 遞迴或子常式呼叫到擷取群組,可透過計算從左到右從子常式呼叫開始,指定數量命名或編號擷取群組的開啟括號來找出。 (?+1)x([ab]) 符合 axaaxbbxabxb V2nono5.107.2YES5.2.4YESYESnonononononoECMA
1.42–1.83
nononononononono
前向子常式呼叫 \g<+1>,其中 +1 為正整數 遞迴或子常式呼叫到擷取群組,可透過計算從左到右從子常式呼叫開始,指定數量命名或編號擷取群組的開啟括號來找出。 \g<+1>x([ab]) 符合 axaaxbbxabxb V2nonono7.7YES5.2.7YESYESnononono2.0nononononononononono
前向子常式呼叫 \g'+1',其中 +1 為正整數 遞迴或子常式呼叫到擷取群組,可透過計算從左到右從子常式呼叫開始,指定數量命名或編號擷取群組的開啟括號來找出。 \g'+1'x([ab]) 符合 axaaxbbxabxb V2nonono7.7YES5.2.7YESYESnononono2.0nononononononononono
命名子常式呼叫 (?&name),其中「name」為擷取群組的名稱 擷取群組的遞迴或子常式呼叫至擷取群組。 a(?<x>b(?&x)?y)z 符合 abyzabbyyzabbbyyyz V2nono5.107.0YES5.2.2YESYESnonononononoECMA
1.42–1.83
nononononononono
命名子常式呼叫 (?P>name),其中「name」為擷取群組的名稱 擷取群組的遞迴或子常式呼叫至擷取群組。 a(?P<x>b(?P>x)?y)z 符合 abyzabbyyzabbbyyyz V2nono5.10YESYESYESYESYESnonononononoECMA
1.42–1.83
nononononononono
命名子常式呼叫 \g<name>,其中「name」為擷取群組的名稱 擷取群組的遞迴或子常式呼叫至擷取群組。 a(?<x>b\g<x>?y)z 符合 abyzabbyyzabbbyyyz V2nonono7.7YES5.2.7YESYESnononono1.9nononononononononono
命名子常式呼叫 \g'name',其中「name」為擷取群組的名稱 擷取群組的遞迴或子常式呼叫至擷取群組。 a(?'x'b\g'x'?y)z 符合 abyzabbyyzabbbyyyz V2nonono7.7YES5.2.7YESYESnononono1.9nononononononononono
子常式定義 (?(DEFINE)regex),其中「regex」為任意正規表示式 DEFINE 群組不參與比對程序。可以在 DEFINE 群組內對擷取群組進行子常式呼叫。 (?(DEFINE)([ab]))
x(?1)y(?1)z
符合 xayazxaybzxbyazxbybz
V2nono5.107.0YES5.2.2YESYESnonononononoECMA
1.42–1.83
nononononononono
子常式呼叫擷取 使用 Ruby 風格 \g 語法進行子常式呼叫 對擷取群組的子常式呼叫會讓該擷取群組儲存子常式呼叫期間符合的文字。 ([ab])\g'1' 符合 ab 時,第一個擷取群組會在符合後儲存 b V2不適用不適用不適用nonononono不適用不適用不適用不適用1.9不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
子常式呼叫擷取 使用 \g 以外的語法進行子常式呼叫 對擷取群組的子常式呼叫會讓該擷取群組儲存子常式呼叫期間符合的文字。 ([ab])(?1) 符合 ab 時,第一個擷取群組會在符合後儲存 b no不適用nonononononono不適用不適用不適用不適用不適用不適用no不適用不適用不適用不適用不適用不適用不適用不適用
遞迴隔離擷取群組 任何遞迴或子常式呼叫 每個子常式呼叫都有自己的擷取群組獨立儲存空間。呼叫中的反向參照無法看到呼叫之前的符合文字,呼叫之後的反向參照也無法看到呼叫中的符合文字。遞迴中的反向參照無法看到其他遞迴層級的符合文字。 (a)(\1)(?2) 永遠不會符合任何東西,因為 \1 總會在 (?2) 進行的呼叫中失敗。 no不適用no5.10–5.18nonononono不適用不適用不適用不適用no不適用no不適用不適用不適用不適用不適用不適用不適用不適用
遞迴還原擷取群組 使用 Ruby 風格 \g 語法的遞迴或子常式呼叫 當正規表示式引擎退出遞迴或子常式呼叫時,它會將所有擷取群組還原為進入遞迴或子常式呼叫之前符合的文字。 (a)(([bc])\1)\g'2' 符合 abaca 時,第三個群組會在符合後儲存 b no不適用不適用不適用7.7YES5.2.7YESYES不適用不適用不適用不適用no不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
遞迴還原擷取群組 使用 \g 以外的語法進行遞迴或子常式呼叫 當正規表示式引擎退出遞迴或子常式呼叫時,它會將所有擷取群組還原為進入遞迴或子常式呼叫之前符合的文字。 (a)(([bc])\1)(?2) 比對 abaca 時,第三個群組會在比對後儲存 b V2不適用no5.10YESYESYESYESYES不適用不適用不適用不適用不適用不適用ECMA
1.42–1.83
不適用不適用不適用不適用不適用不適用不適用不適用
遞迴不會孤立或還原擷取群組 使用 Ruby 風格 \g 語法的遞迴或子常式呼叫 遞迴和子常式呼叫不會對擷取群組給予任何特殊處理,除了子常式呼叫會擷取之外。反向參照總是會看到每個擷取群組最近比對到的文字,無論它們是否在同層遞迴中。 (a)(([bc])\1)\g'2' 比對 abaca 時,第三個群組會在比對後儲存 c V2不適用不適用不適用nonononono不適用不適用不適用不適用1.9不適用不適用不適用不適用不適用不適用不適用不適用不適用不適用
遞迴不會孤立或還原擷取群組 使用 \g 以外的語法進行遞迴或子常式呼叫 遞迴和子常式呼叫不會對擷取群組給予任何特殊處理,除了子常式呼叫會擷取之外。反向參照總是會看到每個擷取群組最近比對到的文字,無論它們是否在同層遞迴中。 (a)(([bc])\1)(?2) 比對 abaca 時,第三個群組會在比對後儲存 c no不適用僅 4nononononono不適用不適用不適用不適用不適用不適用no不適用不適用不適用不適用不適用不適用不適用不適用
遞迴是原子的 使用 (?P>…) 的遞迴或子常式呼叫 遞迴和子常式呼叫是原子的。一旦正規表示式引擎退出它們,它就不會回溯到它們中嘗試遞迴或子常式呼叫的不同排列。 (a+)(?P>1)(?P>1) 永遠無法比對任何東西,因為第一個 (?P>1) 比對所有剩下的 a,而當第二個失敗時,正規表示式引擎不會回溯到第一個 (?P>1) V2不適用不適用no6.510.00–10.235.1.3–7.2.34YES2.14.0–3.6.3不適用不適用不適用不適用不適用不適用no不適用不適用不適用不適用不適用不適用不適用不適用
遞迴是原子的 使用 (?P>0) 以外的語法遞迴整個正規表示式 整個正規表示式的遞迴是原子的。一旦正規表示式引擎退出遞迴,它就不會回溯到它中嘗試遞迴的不同排列。 aa$|a(?R)a|a 在遞迴為原子的情況下,會在 aaa 中比對 a;否則它會比對整個字串。 no不適用不適用no6.5YES5.1.3–7.2.34YESYES不適用不適用不適用不適用no不適用ECMA
1.42–1.83
不適用不適用不適用不適用不適用不適用不適用不適用
遞迴是原子的 使用語法呼叫子常式,而非 (?P>…) 子常式呼叫是原子性的。一旦正規表示式引擎從中退出,它就不會回溯到其中嘗試子常式呼叫的不同排列。 (a+)(?1)(?1) 永遠無法配對任何東西,因為第一個 (?1) 配對所有剩下的 a,而當第二個失敗時,正規表示式引擎不會回溯到第一個 (?1) no不適用僅 4no6.510.00–10.235.1.3–7.2.34YES2.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