2012-05-03 99 views
1

我使用下面的正則表達式的:PHP preg_replace錯誤?

$sEmailHTML = preg_replace ("/<\!-- +(\\[[\"a-zA-Z_]+\\]) +-->/U", "\\1", $sEmailHTML); 
$sEmailHTML = preg_replace ("/\\[\"(.+)\"\\]/U", "\\1", $sEmailHTML); 

在這樣的文字:

["Text:"] 
<!-- ["Click this to authenticate"] --> <!-- [authlink] --> 
<!-- ["Dear"] --> <!-- [firstname] --><!-- [":"] --> 

和它給了我這樣的結果:(已還更換[authlink]和[名字])

Text: 
<!-- Click this to authenticate --> <a href="http://www.mydomain.tld/auth.php?jj=100&aa=SOMEVALUE&end">http://www.mydomain.tld/auth.php?jj=100&aa=SOMEVALUE&end</a> 
Dear John<!-- : --> 

當它應該給這個:

Text: 
Click this to authenticate <a href="http://www.mydomain.tld/auth.php?jj=100&aa=SOMEVALUE&end">http://www.mydomain.tld/auth.php?jj=100&aa=SOMEVALUE&end</a> 
Dear John: 

我不明白爲什麼它不會刪除所有的HTML註釋標記。 如果我執行兩次註釋去除器正則表達式,它也不起作用。 因此,這可能是一個錯誤,或者我錯過了一些東西。 (PHP 5.2.17)

謝謝。我沒在想。改爲和工作:

$sEmailHTML = preg_replace ("/<!-- +(\\[[a-zA-Z_]+\\]) +-->/U", "\\1", $sEmailHTML); 
$sEmailHTML = preg_replace ("/<!-- +(\\[\".+\"\\]) +-->/U", "\\1", $sEmailHTML); 
$sEmailHTML = preg_replace ("/\\[\"(.+)\"\\]/U", "\\1", $sEmailHTML); 
+0

爲什麼''逃脫?爲什麼有兩個方括號'[['在評論文本塊的開頭? – Jon

回答

3

發生這種情況,因爲文本

"Click this to authenticate" 

有空間在他們和你的正則表達式:

"/<\!-- +(\\[[\"a-zA-Z_]+\\]) +-->/U" 

不匹配的空間。此外,要與文字[相匹配,請使用\[,而不是\\[

將其更改爲:

"/<!-- +(\[[\"a-zA-Z_ ]+\]) +-->/U" 
        ^

See it