正则匹配需求:匹配ABC但排除前导反引号,支持开头无前置字符
解决方案:匹配不含前置反引号的
ABC 直接使用负后瞻断言的正则表达式即可满足需求:
(?<!`)ABC
为什么之前的尝试不生效?
- 你用的
(?!)ABC是**负前瞻断言**,它检查的是ABC后面是否没有反引号,和你要排除前置反引号的需求完全无关,所以两个ABC`都会被匹配。 [^]ABC会匹配“非反引号字符+ABC”,不仅会把前置字符包含在匹配结果里,还无法匹配文本开头的ABC`(因为开头没有前置字符),不符合要求。
正则说明
(?<!)`是负后瞻零宽断言,它会检查当前位置的前一个字符不是反引号:
- 当
ABC在文本开头时,前面没有任何字符,断言条件成立,会被匹配 - 当
ABC前面是反引号时,断言条件不成立,不会被匹配 - 匹配结果仅包含
ABC,不会附带任何前置字符
测试示例
- 文本
Hello ABCABC:仅匹配第一个ABC` - 文本
ABCABC:仅匹配第一个ABC`
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

