首页 > 解决方案 > 如何使用正则表达式仅在字符串的某个部分否定子字符串?

问题描述

我正在尝试实现以下目标:我想否定子字符串 '::' 的出现,但仅限于字符串的某个部分。例如:

a<anyStringWithout'::'>b<anyStringAlsoWith'::'>

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

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

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

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

提前致谢!

标签: regexregex-lookaroundsregex-negation

解决方案


您可以使用

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

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

细节

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

推荐阅读