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)|.*(\([^)]+\)))