Perl RegEx:返回嵌套“或”子组的一个匹配项

时间:2018-04-25 21:08:15

标签: regex perl regex-group

说我有文字

The quick brown fox jumps (over) the lazy dog。 然后我希望我的RegEx模式返回,例如,单词hello(文本中没有)或括号内的任何单词,在本例中为over。 所以这样的模式:

/((hello)|(\([^\)]+\)))/

但我希望它为此返回一个匹配。只有优先考虑,这才有意义。那就是:

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

所以在

The quick brown fox jumps (over) the lazy dog 

$1应包含字符串over。并在

hello! The quick brown fox jumps (over) the lazy dog

$1应包含字符串hello

https://regex101.com/r/H5bwKs/2

有没有办法在一个表达式中执行此操作?

1 个答案:

答案 0 :(得分:3)

使用branch reset构造以及贪婪点。订单很重要:

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

Live demo