测试包含特定模式的字符串,除非另一个模式在它之前
Test strings that contain a specific pattern unless another pattern is before it
我想测试包含模式 \[[A-Z]+\]
.
的字符串
但是如果前面有--
,字符串应该不会通过。
通过
[GET] test
test [POST] test
test [POST] --test
test [GET] test --test [DELETE] test
Even there's a --
before [DELETE]
, but there's no --
before [GET]
so it still counts
失败
test test
--[GET] test
test --[GET] test
test --test [PUT] test
我尝试了 ^(?!.*--.*\[[A-Z]+\]).*\[[A-Z]+\]
但失败了 test [GET] test --test [DELETE] test
这是 Regex101
上的一个项目
有正则表达式可以测试吗?
您可以使用这个正则表达式:
^(?:(?!--).)*\[[A-Z]+\]
正则表达式详细信息:
^
: 开始
(?:
: 启动非捕获组
(?!--)
:否定前瞻断言我们没有 --
.
:匹配任意字符
)*
:结束非捕获组。匹配该组中的 0 个或多个
\[[A-Z]+\]
:匹配 [
后跟大写后跟 ]
或者您也可以将此正则表达式与 PCRE 动词一起使用 (*SKIP)(*FAIL)
:
--.*(*SKIP)(*F)|\[[A-Z]+\]
另一种选择是
^[^-[]*(?:(?:\[(?![A-Z]+])|-(?!-))[^-[]*)*\[[A-Z]+]
模式匹配:
^
字符串开头
[^-[]*
可选择匹配除 [
和 -
之外的任何字符
(?:
非捕获组
(?:
非捕获组
\[(?![A-Z]+])
匹配 [
后没有直接跟随 A-Z]
|
或
-(?!-)
匹配 - 当没有直接跟随 -
时
)
关闭非捕获组
[^-[]*
可选择匹配除 [
和 -
之外的任何字符
)*
关闭非捕获组并选择性地重复它
\[[A-Z]+]
在方括号之间匹配 1+ 个字符 A-Z
我想测试包含模式 \[[A-Z]+\]
.
但是如果前面有--
,字符串应该不会通过。
通过
[GET] test
test [POST] test
test [POST] --test
test [GET] test --test [DELETE] test
Even there's a
--
before[DELETE]
, but there's no--
before[GET]
so it still counts
失败
test test
--[GET] test
test --[GET] test
test --test [PUT] test
我尝试了 ^(?!.*--.*\[[A-Z]+\]).*\[[A-Z]+\]
但失败了 test [GET] test --test [DELETE] test
这是 Regex101
上的一个项目有正则表达式可以测试吗?
您可以使用这个正则表达式:
^(?:(?!--).)*\[[A-Z]+\]
正则表达式详细信息:
^
: 开始(?:
: 启动非捕获组(?!--)
:否定前瞻断言我们没有--
.
:匹配任意字符
)*
:结束非捕获组。匹配该组中的 0 个或多个\[[A-Z]+\]
:匹配[
后跟大写后跟]
或者您也可以将此正则表达式与 PCRE 动词一起使用 (*SKIP)(*FAIL)
:
--.*(*SKIP)(*F)|\[[A-Z]+\]
另一种选择是
^[^-[]*(?:(?:\[(?![A-Z]+])|-(?!-))[^-[]*)*\[[A-Z]+]
模式匹配:
^
字符串开头[^-[]*
可选择匹配除[
和-
之外的任何字符
(?:
非捕获组(?:
非捕获组\[(?![A-Z]+])
匹配[
后没有直接跟随A-Z]
|
或-(?!-)
匹配 - 当没有直接跟随-
时
)
关闭非捕获组[^-[]*
可选择匹配除[
和-
之外的任何字符
)*
关闭非捕获组并选择性地重复它\[[A-Z]+]
在方括号之间匹配 1+ 个字符 A-Z