real:: a
real :: b
real c
文字,现在我要匹配的那些真正的无::
其次,在这种情况下,我想只匹配第三实。所以我试图用正则表达式前瞻
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*::)
这是我试过的,但失败了。看看正则表达式调试,这也是由于回溯。但如何正确地做到这一点?
好吧,不过你能解释一下为什么我的正则表达式失败? – user15964
我添加了解释,为什么在lookahead之外的'\ s *'与第二种情况相匹配,并添加了regex101中的图表来说明这个过程。 –
@ user15964该断言是一个“否定性超前断言”。这意味着它声称内容不会立即出现在放置位置之后。 –