任何人都可以一步一步解释我为什么正则表达式失败了:
<.++>
Run Code Online (Sandbox Code Playgroud)
用这个字符串来比较: <em>
使用惰性或贪婪量词找到相同的字符串,但在这种情况下涉及哪些步骤?
我使用Java正则表达式风格.
Dav*_*d Z 12
占有量词,尽可能地贪婪地匹配并且不会退缩,即使这样做也会使整体比赛成功.
在您的示例中,<正则表达式匹配<字符串,然后.++匹配字符串的其余部分,em>.你>的正则表达式中仍然有一个,但字符串中没有字符可供匹配(因为.++全部使用它们).所以比赛失败了.
如果量词是贪婪的,即如果它.+不是.++,那么正则表达式引擎会尝试将匹配的部分减少到.+一个字符em,然后重试.这次匹配会成功,因为>字符串中会有一个左边>的正则表达式匹配.
编辑:一个懒惰的量词就像一个反向的贪婪量词.而不是通过尝试匹配字符串的其余部分并逐个字符地退出,懒惰量词将首先尝试匹配单个字符,在这种情况下只是e.如果这不允许完整的正则表达式匹配(它不会在这里,因为你>在正则表达式中尝试匹配m字符串),延迟量词将向上移动到匹配两个字符,em.然后>正则表达式将>在字符串中排列,匹配将成功.但是,如果它没有成功,那么延迟量词将最多移动三个字符,依此类推.