我想用preg_replace()删除包含其内容的所有评论。
示例:
$mDom =
<<<HTML
<html>
word1 <!-- word2 --> word3 <!-- word4 --> word5
</html>
HTML;
$mDom = preg_replace('/<!--.*-->/ius', '', $mDom);
var_dump( $mDom );
上面的例子将打印:“word1 word5”
我想:“word1 word3 word5”
答案 0 :(得分:3)
您需要使用懒惰(非贪婪)量化:
/<!--.*?-->/ius
请注意?
后面的*
。它会导致正则表达式引擎在找到匹配后立即停止,而不是尽可能长时间地进行匹配。
编辑:您还可以使用特殊修饰符U
:
U (PCRE_UNGREEDY)
此修饰符会反转量词的“贪婪”,以便它们在默认情况下不会贪婪,但如果后跟?
则会变得贪婪。
答案 1 :(得分:3)
使用非贪婪的版本。 http://www.skdevelopment.com/php-regular-expressions.php
$mDom = preg_replace('/<!--.*?-->/ius', '', $mDom);
答案 2 :(得分:1)
这是因为贪婪的匹配。匹配:
<!-- { word2 --> word3 <!-- word4 } -->
添加问号以鼓励花边匹配:
'<!--.*?-->'