PHP preg_替换剥离

PHP preg_替换剥离,php,regex,preg-replace,Php,Regex,Preg Replace,我想用preg_replace()删除所有注释及其内容 例如: $mDom = <<<HTML <html> word1 <!-- word2 --> word3 <!-- word4 --> word5 </html> HTML; $mDom = preg_replace('/<!--.*-->/ius', '', $mDom); var_dump( $mDom ); $mDom= /ius','',$mD

我想用preg_replace()删除所有注释及其内容

例如:

$mDom =  
<<<HTML
<html>
word1 <!-- word2 --> word3 <!-- word4 --> word5
</html>
HTML;

$mDom = preg_replace('/<!--.*-->/ius', '', $mDom);

var_dump( $mDom );
$mDom=
/ius','',$mDom);
var_dump($mDom);
上面的示例将打印:“word1 word5”
我想要:“word1 word3 word5”

您需要使用惰性(非贪婪)量化:

/<!--.*?-->/ius
/ius
注意
*
后面的
。它会导致正则表达式引擎在找到匹配项后立即停止,而不是尽可能长时间地进行匹配


编辑:您还可以使用特殊的修饰符
U

U(PCRE\U UNGREEDY)
此修饰符反转量词的“贪婪性”,使其在默认情况下不贪婪,但如果后跟
,则变为贪婪


(PHP手册:)

使用非贪婪版本

$mDom=preg_replace('//ius',''$mDom);

这是因为贪婪匹配。它匹配:

<!-- { word2 --> word3 <!-- word4 } -->
word3
添加问号以鼓励松散匹配:

'<!--.*?-->'
“”

阅读RegEx的非贪婪内容
'<!--.*?-->'