正则表达式If-Else条件示例

时间:2018-09-25 09:01:39

标签: regex

我正在尝试实现正则表达式'if-else'条件。

我看到了许多示例,说明格式如下(?(?=regex)then|else)

因此,我尝试使用(?(?=a)1|2)

据我的理解(我所期望的):如果后面有1(正向看)a,请匹配!否则搜索2,看是否有匹配项。

输入如下,我期望1突出显示,但实际上是2

1a
2a

有人可以告诉我为什么吗?

谢谢

2 个答案:

答案 0 :(得分:3)

(?(?=abc)1|2)-此条件检查是否成功进行了正向预见。

因此,首先检查abc是否跟随当前位置。如果是这样,则匹配1。这与正向向前看相矛盾,因为如果abc跟随当前位置,您将无法匹配1。

2a匹配2,因为正向超前失败,因此引擎尝试匹配2

另一方面,(?(?=abc)a|2)将与a中的abc相匹配。 Demo.

答案 1 :(得分:1)

来自regular-expressions.info

  

特殊的构造(?ifthen|else)允许您创建条件正则表达式。如果 if 部分的值为true,则正则表达式引擎将尝试匹配 then 部分。否则,尝试使用 else 部分。

因此,(?(?=a)1|2)正则表达式的工作方式如下:

  • 如果右边的下一个字符为a
  • 然后尝试匹配并消耗1(由于1!= a,因此保证失败)
  • 否则,尝试匹配2

您所需要的只是一个替换,在1之后先行以限制其上下文:

(1(?=a)|2)

它将匹配

  • 1(?=a)-1(如果后跟a
  • |-或
  • 2-匹配2