了解积极和消极的观察者 [英] Understanding positive and negative lookaheads

查看:0
本文介绍了了解积极和消极的观察者的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在试图理解消极的抬头是如何对简单的例子起作用的。例如,考虑以下正则表达式:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆