如何使用正则表达式仅在字符串的特定部分否定子字符串?

How to negate a substring only in a certain section of the string with regex?

我正在努力实现以下目标: 我想否定子字符串 '::' 的出现,但只在字符串的某个部分出现。 例如:

ab

我试着用这样的负面前瞻来做到这一点:

a(?!.*::).*b

但是在 'b' 之后出现 '::' 也会使字符串不匹配,例如:'acb::'

有没有办法用正则表达式实现我想要的?

提前致谢!

你可以使用

a(?:(?!a|b|::).)*b

这匹配任何以 a 模式开头的字符串,然后匹配任何不以 ab:: 模式开头的字符,零个或多个次,直到 b 模式。

详情

  • a - a 模式
  • (?: - 非捕获组的开始:
    • (?!a|b|::) - 如果 ab:: 紧邻当前位置
    • 的右侧,则匹配失败的否定前瞻]
    • . - 除换行符之外的任何字符 char
  • )* - 零次或多次
  • b - b 模式。