gpt4 book ai didi

正则表达式:为什么这种负面的前瞻不起作用?

转载 作者:行者123 更新时间:2023-12-04 22:57:34 24 4
gpt4 key购买 nike

我有这样的文字

real:: a
real :: b
real c

现在我想匹配那些没有 :: 的真实其次,在这种情况下,我只想匹配第 3 个实数。所以我用前瞻尝试了正则表达式
real\s*(?!::)

但这符合
real :: b
real c

对于 \s*表示零个或多个 \s ,为什么 real :: b正在匹配?

更新

感谢 Wiktor Stribiżew。使用 regex101 调试工具。我们可以找到 backtrack让事情变得复杂。

我想出了另一个类似的任务,但我无法解决
real (xx(yy)) :: a
real (zz(pp)):: b
real (cc(rr)) c

再次,我想匹配 real (cc(rr))没有 ::下列的。
real\s*\(.*?\)+(?!\s*::)

这是我尝试过的,但失败了。查看正则表达式调试,这也是由于回溯。但是如何正确地做到这一点?

最佳答案

你需要把\s*进入前瞻:

real(?!\s*::)

regex demo
real\s*(?!::)匹配 real因为 real匹配 real ,然后是 \s*匹配 0 个或多个空格,则前瞻在 :: 处匹配失败 并且引擎回溯 ,即释放与 \s*匹配的空间并尝试重新匹配字符串。自 \s*可以匹配空字符串, real之前 :: b匹配。

regex debugger scheme at regex101显示幕后发生的事情:

enter image description here

关于正则表达式:为什么这种负面的前瞻不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38573177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com