不是所有环境下的正则表达式都支持条件处理。
正则表达式里的条件要用?定义。
?这个元字符表示的意思很多,一定要区分开。有这么几种意思:
a.作为量词,跟在一个字符或子表达式后面表示可出现0或1次。
b.表非贪婪模式,跟在量词元字符后面,如??、*?、+?
c.在前后向查找里使用,如(?=)、(?<=)、(?!)
d.表逻辑判断、条件。
1.回溯引用条件
example_1
回溯引用条件是在前面的子表达式匹配成功的情况下才允许使用的,定义这种条件的语法是(?(backreference)true-regex)。看一个例子:
如果前面匹配到[A]则后面也必须匹配到[A]
example_2
刚刚是满足条件下执行一个表达式。条件还可以有否则表达式。用来定义这种条件的语法是(?(backreference)true-regex|false-regex)
以北美电话号码格式匹配做为例子。(123)456-7890和123-456-7890都是可接受的格式。很明显,如果有(则必须匹配到),否则要匹配到-。
正则表达式 (()?\d{3}(?(1))|-)\d{3}-\d{4}
文本 123-456-7890 (123)456-7890
匹配结果 123-456-7890 (123)456-7890
分析: (()?匹配一个可选的( 。然后(?(1))|-)判断如果(1)存在,则必须要匹配到),否则-必须被匹配到。
2.前后查找条件
e