正则表达式 - 特定单词后的多个匹配项

regex - multiple matches after a specific word

简化示例:考虑字符串 aabaabaabaabaacbaabaabaabaa

我想匹配中间 c 之后的所有 aa,使用一个正则表达式。

我最接近的是 c.*\Kaa,但它只匹配最后一个 aa,并且只匹配第一个带有 ungreedy 标志的 aa

我正在使用 regex101 网站进行测试。

您可以使用

(?:\G(?!^)|c).*?\Kaa

参见regex demo详情:

  • (?:\G(?!^)|c) - 上一个成功匹配的结尾 (\G(?!^)) 或 (|) a c char
  • .*? - 除换行字符外的任何零个或多个字符,尽可能少
  • \K - 忘记到目前为止匹配的文本
  • aa - aa 字符串。

刚好匹配

aa(?!.*c)

Demo

(?!.*c) 是一个 *negative lookahead,在匹配 'aa' 之后,'c' 不会出现在字符串的后面。