PHP preg_replace剥离

时间:2012-02-02 19:41:27

标签: php regex preg-replace

我想用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”

3 个答案:

答案 0 :(得分:3)

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

/<!--.*?-->/ius

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

Read more about it


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

  

U (PCRE_UNGREEDY)
  此修饰符会反转量词的“贪婪”,以便它们在默认情况下不会贪婪,但如果后跟?则会变得贪婪。

(PHP手册:Possible modifiers in regex patterns

答案 1 :(得分:3)

使用非贪婪的版本。 http://www.skdevelopment.com/php-regular-expressions.php

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

答案 2 :(得分:1)

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

<!-- { word2 --> word3 <!-- word4 } -->

添加问号以鼓励花边匹配:

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