正则表达式-了解环顾

时间:2019-05-24 15:42:00

标签: regex regex-lookarounds

我正在阅读此article,但在理解这些内容时遇到了一些困难:

给出字符串quit和正则表达式q(?=u)i的原因,为什么正则表达式不匹配?

引擎首先找到q,然后向前看,看在q之后是否还有u对吗?既然是正面的前瞻,这将导致正面的断言,但是我不明白接下来会发生什么。

某些线索可能是(关于环顾四周):

They do not consume characters in the string, but only assert whether a match is possible or not. 

有人可以帮助我完全理解吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

这是因为环视瞄准的是字符之间的位置,而不是字符本身。

如果我们按照三个步骤阅读您的正则表达式:

  1. 匹配字符q
  2. 确保下一个字符是u(正确)-这与u是下一个字符的位置匹配
  3. 环顾四周后,请确保下一个字符是i-不是,因为您仍然处在下一个字符是u的位置。

通常使用环回查找来查找通配符匹配的开始/结束,例如,如果您只想匹配qu之后的单词部分,则可以使用后向查找来查找捕获开始:

(?<=\bqu)

然后捕获任何字符,直到单词结尾:

(?<=\bqu).*?\b

这将匹配以下内容:

quit => it
question => estion
quagmire => agmire

注意,后面的外观表示比赛的开始,而不必知道比赛的第一个字符是什么。