匹配此环视正则表达式的字符串

时间:2017-08-29 05:05:39

标签: regex pcre regex-lookarounds lookahead

我正在研究this教程中的正则表达式外观。

它有一个例子解释了如何使用环视来检查是否存在(或不存在),但是环绕式括号中的正则表达式不用于实际匹配。

例如,针对String quit 检查模式q(?=u)i。并且它不会返回匹配。

我理解这个例子 但我想不出任何匹配此正则表达式模式的字符串。如果我对外观的理解是正确的,我认为没有任何字符串与此正则表达式匹配。

我说错了吗?如果不匹配,哪个String匹配此正则表达式?

1 个答案:

答案 0 :(得分:1)

我不是这个教程网站的忠实粉丝,但是如果你仔细阅读它实际上说的内容,它就永远不会声称正则表达式q(?=u)i与字符串quit匹配:

  

让我们再看看内部,以确保您了解前瞻的含义。让我们应用q(?= u)i来退出。前瞻现在是积极的,后面是另一个令牌。同样,q匹配q,u匹配u。 同样,必须放弃前瞻的匹配,因此引擎从字符串中的i退回到u。前瞻是成功的,所以引擎继续i。但我无法与你相提并论。所以这场比赛尝试失败了。所有剩余的尝试都会失败,因为字符串中没有更多的q。

我认为你可能仍然对前瞻的工作方式感到困惑。要不然,或者你误读了教程网站。如果是前者,则前导通过断言匹配,而不是实际消费字符串中的任何内容。所以正则表达式q(?=u)i说:

match the letter 'q'
lookahead to the next character after 'q' and assert that it is 'u'
then match an 'i' immediately after the 'q'

当然,字符串'quit'失败,实际上所有字符串都会失败。前瞻说是为了验证q后跟u,但是下面的模式与此相矛盾,坚持i紧随其后。

相关问题