1

私は次の正規表現を使用しています:

$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 コメント タグをすべて削除しない理由がわかりません。コメントリムーバーの正規表現を 2 回実行しても機能しません。したがって、それはバグであるか、何かが欠けています。(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);
4

1 に答える 1

3

これは、テキストが原因で発生しています

"Click this to authenticate"

それらとあなたの正規表現にスペースが含まれています:

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

スペースと一致しません。また、リテラルに一致させるには、not[を使用します。\[\\[

次のように変更します。

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

見る

于 2012-05-03T07:07:58.267 に答える