如何在捕获组中捕获组?

时间:2018-11-27 17:30:26

标签: regex pcre

例如字符串:

bla bla bla (bla oops bla
bla bla bla 
bla bla bla) bla oops
bla bla bla 
oops bla (bla bla oops
bla)

我怎样才能在方括号之间得到“哎呀”? 首先,我得到方括号之间的文本:

(?<=\()([\w\W]*?)(?=\))

我可以在捕获组中的同一个正则表达式捕获组中(在捕获组中找到“ oops”)吗?

2 个答案:

答案 0 :(得分:1)

您可以使用

(?:\G(?!\A)|\()[^()]*?\Koops

或者,如果必须检查右括号,请在末尾添加前瞻:

(?:\G(?!\A)|\()[^()]*?\Koops(?=[^()]*\))

请参见regex demo

详细信息

  • (?:\G(?!\A)|\()-(或上一场比赛的结束(\G(?!\A)
  • [^()]*?-()之外的0个以上的字符
  • \K-match reset operator
  • oops-您需要的单词(如果您需要整个单词匹配,请用\b包装)
  • (?=[^()]*\))-一个positive lookahead,要求除首个(以外的0+个字符,直到第一个)才能立即显示在当前位置。

答案 1 :(得分:0)

您可以使用以下正则表达式:

(?<=\()([\w\W]*?(oops)[\w\W]*?)(?=\))

基本上,它会注入Group来寻找'oops',然后将被捕获的Group之前和之后匹配的'[\w\W]*?'加倍。

现在'oops'将在Group 2中。