正则表达式前瞻为什么
Regex lookahead why
对于PCRE,以下两个正则表达式有什么区别?
(?=<!--)([\s\S]*?-->)
和
(<!--[\s\S]*?-->)
第一个匹配HTML评论提到HERE
这两个模式将匹配相同的东西。这是第一个模式的解释:
(?=<!--) assert that what immediately follows is <!--
([\s\S]*?-->) then capture everything, across lines if necessary,
until reaching the first -->
第二个模式不使用前瞻,而是只匹配一个 HTML 评论:
(<!--[\s\S]*?-->)
同样,此模式将跨行匹配。
我希望这两种模式具有相似的性能。您选择什么将取决于哪个对您的数据执行得更好、您使用的工具(并非所有正则表达式引擎都支持 lookarounds)以及您发现哪种模式更容易阅读。
对于PCRE,以下两个正则表达式有什么区别?
(?=<!--)([\s\S]*?-->)
和
(<!--[\s\S]*?-->)
第一个匹配HTML评论提到HERE
这两个模式将匹配相同的东西。这是第一个模式的解释:
(?=<!--) assert that what immediately follows is <!--
([\s\S]*?-->) then capture everything, across lines if necessary,
until reaching the first -->
第二个模式不使用前瞻,而是只匹配一个 HTML 评论:
(<!--[\s\S]*?-->)
同样,此模式将跨行匹配。
我希望这两种模式具有相似的性能。您选择什么将取决于哪个对您的数据执行得更好、您使用的工具(并非所有正则表达式引擎都支持 lookarounds)以及您发现哪种模式更容易阅读。