我有这样的文字
real:: a
real :: b
real c
现在我想匹配那些真实的没有::
接下来,在这种情况下,我只想匹配第三个实数。所以我尝试了正则表达式和前瞻
real\s*(?!::)
但这匹配
real :: b
real c
For \s*
意味着零个或多个\s
, why real :: b
正在匹配?
update
感谢维克托·斯特里比泽夫。使用regex101调试工具。我们可以找backtrack
让事情变得复杂。
我想出了另一个类似的任务,但我无法解决
real (xx(yy)) :: a
real (zz(pp)):: b
real (cc(rr)) c
再次,我想匹配real (cc(rr))
这是没有::
下列的。
real\s*\(.*?\)+(?!\s*::)
这就是我尝试过的,但失败了。查看正则表达式调试,也是由于回溯。但如何正确地做到这一点呢?
你需要把\s*
进入前瞻:
real(?!\s*::)
See the 正则表达式演示 https://regex101.com/r/rW3wT8/1
The real\s*(?!::)
火柴real
因为real
火柴real
,那么\s*
匹配 0 个或多个空格,则先行匹配失败::
和引擎回溯,也就是说,它释放了与\s*
并尝试重新匹配该字符串。自从\s*
可以匹配空字符串,real
before :: b
得到匹配。
See the 正则表达式调试器regex101 的方案 https://regex101.com/r/qY8dW5/1显示幕后发生的事情:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)