PHP preg_replace错误?

时间:2012-05-03 07:02:35

标签: php regex 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]和[firstname])

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);

1 个答案:

答案 0 :(得分:3)

这是因为文本

"Click this to authenticate"

在它们和你的正则表达式中有空格:

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

与空格不匹配。另外,要匹配文字[,请使用\[,而不是\\[

将其更改为:

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

See it