2012-02-02 55 views
0

我想用preg_replace()刪除所有帶有內容的註釋。PHP preg_replace stripping

例子:

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

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

var_dump($mDom); 

上面的例子會打印: 「字詞1的word5」
我想: 「字詞1 WORD3的word5」

+0

閱讀上的非貪婪工具和正則表達式 – Tim 2012-02-02 19:43:57

回答

3

您需要使用懶惰(非貪婪)定量:

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

請注意後面的?。它會導致正則表達式引擎一旦找到匹配就停止,而不是儘可能長時間地進行匹配。

Read more about it


編輯:您還可以使用特殊的修改U

ù(PCRE_UNGREEDY)
這個修飾符反轉量詞的 「貪婪」,使他們不貪婪默認情況下,但如果後面跟着?會變得貪婪。

(PHP手冊:Possible modifiers in regex patterns

+0

它的工作原理!謝謝 :) – 2012-02-02 20:47:45

1

這是因爲貪婪的匹配。它匹配:

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

添加一個問號,以鼓勵laxy匹配:

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