2017-08-29 53 views
0

我正在学习this教程中的regex lookaround。匹配这个lookaround正则表达式的字符串

它有一个例子说明如何使用lookaround来检查存在(或不存在),但查找圆括号内的正则表达式不用于实际匹配。

在示例中,针对字符串退出检查模式q(?=u)i。它不会返回匹配。

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

我正确吗?如果不是,哪个字符串匹配这个正则表达式?

回答

1

我不是这个教程网站的忠实粉丝,但如果你看仔细它实际上说,它从来没有声称q(?=u)i字符串quit相匹配的正则表达式:

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

我想你可能仍然会对lookaheads的工作方式感到困惑。要么是这样,要么你误读了教程网站。如果前者,则前瞻通过一个匹配,而实际上消费字符串中的任何东西。所以,正则表达式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' 

当然,字符串“退出”失败,其实都是串会失败。该前瞻表示验证q后面跟着u,但以下模式与此相矛盾,因为坚持认为i是以下内容。

+0

我跟着你,我觉得我的语言有点混乱。我已经改变了一些问题,使事情更清楚。我正在寻找一个返回'q(?= u)i'上的匹配的字符串。 **退出**不会返回匹配。我想不出一个字符串会返回一个匹配这个正则表达式。 –

+1

@gitblame我不认为你遵循我所说的实际。有_no_字符串将会匹配这个正则表达式。再一次,当前实际模式匹配'qi'时,前瞻断言'qu'。显然,这对任何字符串都会失败。 –

+0

没有阅读您的答案的最后一个声明。现在明白了。谢谢。 –