如何在捕获组中捕获组?
how to capture group within capture group?
例如,字符串:
bla bla bla (bla oops bla
bla bla bla
bla bla bla) bla oops
bla bla bla
oops bla (bla bla oops
bla)
如何在括号之间得到 'oops'?
首先,我得到方括号之间的文本:
(?<=\()([\w\W]*?)(?=\))
我可以在捕获组内的同一个正则表达式捕获组中(在捕获组内找到 'oops')吗?
您可以使用以下正则表达式:
(?<=\()([\w\W]*?(oops)[\w\W]*?)(?=\))
基本上它会注入一个 Group
寻找 'oops'
然后它会在捕获的组之前和之后加倍匹配“[\w\W]*?
”。
现在 'oops'
将在 Group 2
。
您可以使用
(?:\G(?!\A)|\()[^()]*?\Koops
或者,如果您必须检查右括号,请在末尾添加前瞻:
(?:\G(?!\A)|\()[^()]*?\Koops(?=[^()]*\))
详情
(?:\G(?!\A)|\()
- (
或上一场比赛结束 (\G(?!\A)
)
[^()]*?
- 除了 (
和 )
之外的任何 0+ 个字符
\K
- match reset operator
oops
- 您需要的单词(如果您需要整个单词匹配,请用 \b
换行)
(?=[^()]*\))
- positive lookahead 需要除 (
和 )
以外的 0+ 个字符,直到第一个 )
立即出现在右侧当前位置。
例如,字符串:
bla bla bla (bla oops bla
bla bla bla
bla bla bla) bla oops
bla bla bla
oops bla (bla bla oops
bla)
如何在括号之间得到 'oops'? 首先,我得到方括号之间的文本:
(?<=\()([\w\W]*?)(?=\))
我可以在捕获组内的同一个正则表达式捕获组中(在捕获组内找到 'oops')吗?
您可以使用以下正则表达式:
(?<=\()([\w\W]*?(oops)[\w\W]*?)(?=\))
基本上它会注入一个 Group
寻找 'oops'
然后它会在捕获的组之前和之后加倍匹配“[\w\W]*?
”。
现在 'oops'
将在 Group 2
。
您可以使用
(?:\G(?!\A)|\()[^()]*?\Koops
或者,如果您必须检查右括号,请在末尾添加前瞻:
(?:\G(?!\A)|\()[^()]*?\Koops(?=[^()]*\))
详情
(?:\G(?!\A)|\()
-(
或上一场比赛结束 (\G(?!\A)
)[^()]*?
- 除了(
和)
之外的任何 0+ 个字符
\K
- match reset operatoroops
- 您需要的单词(如果您需要整个单词匹配,请用\b
换行)(?=[^()]*\))
- positive lookahead 需要除(
和)
以外的 0+ 个字符,直到第一个)
立即出现在右侧当前位置。