正则表达式负前瞻不匹配最后 space
Regex negative lookahead not matching last space
我有文字:
test: [ABCD]
test: foobar
test: [ABCD]
我写了这个正则表达式:
test:\s+(?!\[ABCD)
所以基本上我想找到 test:
后面没有跟 [ABCD
并且两者之间可以有任意数量的白色 space 的任何事件。
因此,对于前两个示例,它按预期工作,但我对第三个示例有疑问:看起来是因为这部分:(?!\[ABCD)
\s+
与最后 [=28] 不匹配=] 如果有多个。为什么会这样,如何解决?我想第三个例子 bahave 就像第一个一样。来自 regex101 的屏幕截图说明了这个问题:
你需要在与锚点的比赛前进行前瞻:
/^(?!test:\s+\[ABCD\]).*/
如果符合标准,您有一个很好的答案可以匹配整行,但基于此:
I want to find any occurence where "test:" is NOT followed by "[ABCD" and there can be any amount of whitespace between the two.
如果您只想匹配“test:”部分,您可以将空白字符移动到负数 look-ahead 中。
test:(?!\s+\[ABCD)
使用您的示例短语的 regex101 屏幕截图:
您获得了最后一个匹配项,因为 \s+
可以回溯一步以确保最后一个断言为真。
没有列出语言,但是 possessive quantifiers 支持,您也可以使用
test:\s++(?!\[ABCD)
看到一个regex demo。
我有文字:
test: [ABCD]
test: foobar
test: [ABCD]
我写了这个正则表达式:
test:\s+(?!\[ABCD)
所以基本上我想找到 test:
后面没有跟 [ABCD
并且两者之间可以有任意数量的白色 space 的任何事件。
因此,对于前两个示例,它按预期工作,但我对第三个示例有疑问:看起来是因为这部分:(?!\[ABCD)
\s+
与最后 [=28] 不匹配=] 如果有多个。为什么会这样,如何解决?我想第三个例子 bahave 就像第一个一样。来自 regex101 的屏幕截图说明了这个问题:
你需要在与锚点的比赛前进行前瞻:
/^(?!test:\s+\[ABCD\]).*/
如果符合标准,您有一个很好的答案可以匹配整行,但基于此:
I want to find any occurence where "test:" is NOT followed by "[ABCD" and there can be any amount of whitespace between the two.
如果您只想匹配“test:”部分,您可以将空白字符移动到负数 look-ahead 中。
test:(?!\s+\[ABCD)
使用您的示例短语的 regex101 屏幕截图:
您获得了最后一个匹配项,因为 \s+
可以回溯一步以确保最后一个断言为真。
没有列出语言,但是 possessive quantifiers 支持,您也可以使用
test:\s++(?!\[ABCD)
看到一个regex demo。