我不是这个教程网站的忠实粉丝,但如果你看仔细它实际上说,它从来没有声称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
是以下内容。
我跟着你,我觉得我的语言有点混乱。我已经改变了一些问题,使事情更清楚。我正在寻找一个返回'q(?= u)i'上的匹配的字符串。 **退出**不会返回匹配。我想不出一个字符串会返回一个匹配这个正则表达式。 –
@gitblame我不认为你遵循我所说的实际。有_no_字符串将会匹配这个正则表达式。再一次,当前实际模式匹配'qi'时,前瞻断言'qu'。显然,这对任何字符串都会失败。 –
没有阅读您的答案的最后一个声明。现在明白了。谢谢。 –