Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式If-Else条件示例_Regex - Fatal编程技术网

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

Regex 正则表达式If-Else条件示例,regex,Regex,我试图实现一个正则表达式“if-else”条件 我看到许多示例说明了以下格式(?(?=regex)then | else) 所以我尝试了一下:(?(?=a)1 | 2) 据我所知(我所期望的):如果有一个1后跟(正向展望)a,则匹配!。否则,搜索2,查看是否存在匹配项 输入如下,我原以为1会突出显示,但结果是2 1a 2a 有人能告诉我为什么吗 谢谢(?(?=abc)1 | 2)-如果正向前瞻成功,则此条件检查 因此,首先它检查abc是否跟随当前位置。如果这是真的,则匹配1。这与正向前瞻相矛盾

我试图实现一个正则表达式“if-else”条件

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

所以我尝试了一下:
(?(?=a)1 | 2)

据我所知(我所期望的):如果有一个
1
后跟(正向展望)
a
,则匹配!。否则,搜索
2
,查看是否存在匹配项

输入如下,我原以为1会突出显示,但结果是
2

1a
2a
有人能告诉我为什么吗

谢谢

(?(?=abc)1 | 2)
-如果正向前瞻成功,则此条件检查

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

2a
匹配
2
,因为正向前瞻失败,所以引擎尝试匹配
2

1a
2a
另一方面,
(?(?=abc)a | 2)
将匹配
abc
中的
a

(?(?=abc)1 | 2)
-如果正向前瞻成功,则此条件检查

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

2a
匹配
2
,因为正向前瞻失败,所以引擎尝试匹配
2

1a
2a
另一方面,
(?(?=abc)a | 2)
将匹配
abc
中的
a

来自:

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

因此,
(?(?=a)1 | 2)
regex的工作原理如下:

  • 如果右边的下一个字符是
    a
  • 然后尝试匹配并使用
    1
    (由于
    1
    !=
    a
    ,因此保证失败)
  • 否则,尝试匹配
    2
您所需要的只是一个简单的替换,在
1
后面加上一个前瞻,以限制其上下文:

(1(?=a)|2)
它会匹配的

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

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

因此,
(?(?=a)1 | 2)
regex的工作原理如下:

  • 如果右边的下一个字符是
    a
  • 然后尝试匹配并使用
    1
    (由于
    1
    !=
    a
    ,因此保证失败)
  • 否则,尝试匹配
    2
您所需要的只是一个简单的替换,在
1
后面加上一个前瞻,以限制其上下文:

(1(?=a)|2)
它会匹配的

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

您使用哪种语言/工具来运行regex?很多人不支持环顾条件。你真正的问题是什么?现实生活中的情景是什么?在一个不包含
abc
的字符串中,你真的不能期望任何
abc
的匹配。这里有很多帮助:@Aaron,我正在使用Java。我不知道正则表达式没有得到很多人的支持。谢谢你让我知道你仍然忽略了环视仪的要点:它们是在你放置它们的地方执行的,所以,
(?(?=a)1 | 2)
永远不会尝试匹配
1
,因为
1
不是
a
(和
(?=a)1
确切地说,引擎将首先尝试将紧跟着
a
的位置与前瞻相匹配,这将导致失败,因此else分支将触发,
2
将被尝试,而不是
1
。如果您想在
1
之后检查
a
,您将使用
(?(?=1a)1 | 2)
,但您可能只需要像
(1(?=a)| 2)这样的一个简单的替换
你使用哪种语言/工具来运行你的正则表达式?很多人都不支持环顾条件。你真正的问题是什么?现实生活中的场景是什么?你真的不能期望在一个不包含
abc
的字符串中匹配
abc
。这里有很多帮助:@Aaron,我在使用Java。我不知道正则表达式不是得到许多人的支持。感谢你告诉我你仍然忽略了环顾四周的要点:它们在你放置它们的地方执行,因此,
(?(?=a)1 | 2)
永远不会尝试匹配
1
,因为
1
不是
a
(和
(?=a)1
确切地说,引擎将首先尝试将紧跟着
a
的位置与前瞻相匹配,这将导致失败,因此else分支将触发,
2
将被尝试,而不是
1
。如果您想在
1
之后检查
a
,您将使用
(?(?=1a)1 | 2)
,但你可能只需要像
(1(?=a)| 2)
Turczyn,非常感谢你的回答。实际上我刚刚尝试将正则表达式更改为(?=a)1 | 2,(输入保持不变),但'1a'的'1'仍然无法检测到。你能告诉我为什么吗?@Joe Becuase in
1a
正向前瞻
(?=a)
失败,因此它不匹配
1
,而是尝试匹配
2
,因为它位于cinditional.Turcz的“else”部分