Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 Perl正则表达式:返回一个嵌套的匹配;或;子群_Regex_Perl_Regex Group - Fatal编程技术网

Regex Perl正则表达式:返回一个嵌套的匹配;或;子群

Regex Perl正则表达式:返回一个嵌套的匹配;或;子群,regex,perl,regex-group,Regex,Perl,Regex Group,说我有一条短信 敏捷的棕色狐狸跳过懒惰的狗。 然后我希望我的正则表达式模式返回单词hello(文本中不存在)或括号内的任何单词,在本例中是over。 因此,一种模式如下: /((你好)|(\([^\)]+\)/ 但是我希望它能为这个返回一个匹配。这只有在优先考虑的情况下才有意义。即: 如果hello在此字符串中,则$1应为hello 如果文本中没有hello,则返回括号中的内容(如果可以找到) 所以在 $1应包含上方的字符串。而且 hello! The quick brown fox jum

说我有一条短信

敏捷的棕色狐狸跳过懒惰的狗。 然后我希望我的正则表达式模式返回单词
hello
(文本中不存在)或括号内的任何单词,在本例中是
over
。 因此,一种模式如下:

/((你好)|(\([^\)]+\)/

但是我希望它能为这个返回一个匹配。这只有在优先考虑的情况下才有意义。即:

  • 如果
    hello
    在此字符串中,则
    $1
    应为
    hello
  • 如果文本中没有
    hello
    ,则返回括号中的内容(如果可以找到)
所以在

$1
应包含
上方的字符串。而且

hello! The quick brown fox jumps (over) the lazy dog
$1
应该包含字符串
hello

有没有办法在一个表达式中实现这一点?

使用construct和贪心点。订购事宜:

^(?|.*(hello)|.*(\([^)]+\)))

不,你不能这样做。捕获组总是通过计数
字符从左到右进行编号。无法让不同的组填充相同的数字。@Barmar有
(?|…)
构造。@revo这对我来说是一个新的!另一个很好的链接:
^(?|.*(hello)|.*(\([^)]+\)))