PHP preg_替换剥离
我想用preg_replace()删除所有注释及其内容 例如: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
$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的非贪婪内容
'<!--.*?-->'