如何使用正则表达式仅在字符串的特定部分否定子字符串?
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
模式开头的字符串,然后匹配任何不以 a
、b
和 ::
模式开头的字符,零个或多个次,直到 b
模式。
详情
a
- a
模式
(?:
- 非捕获组的开始:
(?!a|b|::)
- 如果 a
、b
或 ::
紧邻当前位置 的右侧,则匹配失败的否定前瞻]
.
- 除换行符之外的任何字符 char
)*
- 零次或多次
b
- b
模式。
我正在努力实现以下目标: 我想否定子字符串 '::' 的出现,但只在字符串的某个部分出现。 例如:
a
我试着用这样的负面前瞻来做到这一点:
a(?!.*::).*b
但是在 'b' 之后出现 '::' 也会使字符串不匹配,例如:'acb::'
有没有办法用正则表达式实现我想要的?
提前致谢!
你可以使用
a(?:(?!a|b|::).)*b
这匹配任何以 a
模式开头的字符串,然后匹配任何不以 a
、b
和 ::
模式开头的字符,零个或多个次,直到 b
模式。
详情
a
-a
模式(?:
- 非捕获组的开始:(?!a|b|::)
- 如果a
、b
或::
紧邻当前位置 的右侧,则匹配失败的否定前瞻]
.
- 除换行符之外的任何字符 char
)*
- 零次或多次b
-b
模式。