假设我们有以下表达式
(?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'修饰符并认为它可以在表达式的任何位置使用换行符。但事实证明你不能打破“?|”无论使用哪种修饰语,都可以使用。