我正在研究this教程中的正则表达式外观。
它有一个例子解释了如何使用环视来检查是否存在(或不存在),但是环绕式括号中的正则表达式不用于实际匹配。
例如,针对String quit 检查模式q(?=u)i
。并且它不会返回匹配。
我理解这个例子 但我想不出任何匹配此正则表达式模式的字符串。如果我对外观的理解是正确的,我认为没有任何字符串与此正则表达式匹配。
我说错了吗?如果不匹配,哪个String匹配此正则表达式?
答案 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
紧随其后。