了解积极和消极的观察者 [英] Understanding positive and negative lookaheads
本文介绍了了解积极和消极的观察者的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在试图理解消极的抬头是如何对简单的例子起作用的。例如,考虑以下正则表达式:
a(?!b)c
我认为负值前视与位置匹配。因此,在这种情况下,正则表达式匹配任何严格包含3个字符且不是abc
的字符串。
但这不是真的,this demo中可以看到。为什么?
推荐答案
LookaHead不使用任何字符。它只检查是否可以匹配先行:
a(?!b)c
因此,在这里,在匹配之后,它只检查它后面是否不跟b
,但不使用not
字符(即),后面跟c
。
如何a(?!b)c
匹配ac
ac
|
a
ac
|
(?!b) #checks but does not consume. Pointer remains at c
ac
|
c
正向前视
正向先行类似于尝试匹配先行中的模式。如果可以匹配,则正则表达式引擎继续匹配模式的其余部分。如果不能,则丢弃该匹配项。
例如
abc(?=123)d+
匹配abc123
abc123
|
a
abc123
|
b
abc123
c
abc123 #Tries to match 123; since is successful, the pointer remains at c
|
(?=123)
abc123 # Match is success. Further matching of patterns (if any) would proceed from this position
|
abc123
|
d
abc123
|
d
abc123 #Reaches the end of input. The pattern is matched completely. Returns a successfull match by the regex engine
|
d
这篇关于了解积极和消极的观察者的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文