次の式があるとしましょう
(?x) ((a b) (c) | (d) (e f) | (g) h (i) )
次の後方参照を取得します。
\1 abc, def, ghi
\2 ab
\3 c
\4 d
\5 ef
\6 g
\7 i
Notepad++ 正規表現エンジンは素晴らしい構造をサポートしています:
(?|expression using the alternation | operator)
その式は、代替の他のブランチにあるものによって部分式カウンターが変更されないようにします。それは完全に正常に動作します。そう
(?x) (?| (a b) (c) | (d) (e f) | (g) h (i) )
次のグループを作成します
\1 ab, d, g
\2 c, ef, i
しかし、PHP でこの構成を使用しようとすると、エラーが発生しました。
警告: preg_match_all(): コンパイルに失敗しました: (? または (?- のオフセット 11 の後に文字が認識されません ...
では、PHP で (前述の構成のように) 代替の異なるブランチに同じ番号を付けることは可能ですか?
ソリューション
問題は、「?」の間に改行を入れたことです。と '!'。「x」修飾子を使用して、式のどこでも改行を使用できると考えました。しかし、結局のところ、「?|」を壊すことはできません。使用される修飾子に関係なく、部分。