首页 > 解决方案 > 测试包含特定模式的字符串,除非它之前有另一个模式

问题描述

我想测试一个包含模式的字符串\[[A-Z]+\]

但如果--它之前有一个,则字符串不应该通过。

经过

即使有--before [DELETE],但没​​有--before[GET]所以它仍然很重要

失败

我试过^(?!.*--.*\[[A-Z]+\]).*\[[A-Z]+\]但失败了test [GET] test --test [DELETE] test

这是Regex101上的一个项目

有正则表达式可以测试吗?

标签: regexpcre

解决方案


你可以使用这个正则表达式:

^(?:(?!--).)*\[[A-Z]+\]

正则表达式演示

正则表达式详细信息:

  • ^: 开始
  • (?::启动非捕获组
    • (?!--): 否定前瞻断言我们没有--
    • .: 匹配任意字符
  • )*:结束非捕获组。匹配此组中的 0 个或多个
  • \[[A-Z]+\]: 匹配[后跟大写字母后跟]

或者,您也可以将此正则表达式与 PCRE 动词一起使用(*SKIP)(*FAIL)

--.*(*SKIP)(*F)|\[[A-Z]+\]

正则表达式演示 2


推荐阅读