我正在尝试实现正则表达式'if-else'条件。
我看到了许多示例,说明格式如下(?(?=regex)then|else)
。
因此,我尝试使用(?(?=a)1|2)
。
据我的理解(我所期望的):如果后面有1
(正向看)a
,请匹配!否则搜索2
,看是否有匹配项。
输入如下,我期望1突出显示,但实际上是2
。
1a
2a
有人可以告诉我为什么吗?
谢谢
答案 0 :(得分:3)
(?(?=abc)1|2)
-此条件检查是否成功进行了正向预见。
因此,首先检查abc
是否跟随当前位置。如果是这样,则匹配1
。这与正向向前看相矛盾,因为如果abc
跟随当前位置,您将无法匹配1。
2a
匹配2
,因为正向超前失败,因此引擎尝试匹配2
。
另一方面,(?(?=abc)a|2)
将与a
中的abc
相匹配。 Demo.
答案 1 :(得分:1)
特殊的构造
(?ifthen|else)
允许您创建条件正则表达式。如果 if 部分的值为true
,则正则表达式引擎将尝试匹配 then 部分。否则,尝试使用 else 部分。
因此,(?(?=a)1|2)
正则表达式的工作方式如下:
a
1
(由于1
!= a
,因此保证失败)2
。您所需要的只是一个替换,在1
之后先行以限制其上下文:
(1(?=a)|2)
它将匹配
1(?=a)
-1
(如果后跟a
|
-或2
-匹配2
。