-2

長い長い $partnerリストがあり、単一の共通ファイルに書き込みます。

株式会社リムーブ

$partner =<<<EOT
"#<h1 class=\"logo\"(.*?)</h1>#s","#<h2 class=\"hidden\"(.*?)</h2>#s"
EOT;
//more $partner rules...

index.php

include(remove.inc);
$str = preg_replace(array($partner), '', $str);

このリターン:

警告: preg_replace(): 12 行目の d:\www\indoor\index.php に不明な修飾子 ',' があります

4

2 に答える 2

3

$partnerは文字列の配列であるはずですが、そうではありません: HEREDOC 構文を使用して文字列として定義しています。

文字列の最初の文字は二重引用符で、正規表現エンジンはこれを区切り文字として扱います。したがって、次のエスケープされていない二重引用符が検出された場合:

"#<h1 class=\"logo\"(.*?)</h1>#s",
                                ^

エンジンは、後に続くものはすべて正規表現修飾子でなければならないと想定します。,は有効な修飾子ではないため、結果はエラーになります。

それを行う正しい方法は

$partner = array(
    "#<h1 class=\"logo\"(.*?)</h1>#s",
    "#<h2 class=\"hidden\"(.*?)</h2>#s",
);

として使用されます

$str = preg_replace($partner, '', $str);
于 2013-01-27T15:58:20.240 に答える
1

例のように定義すると、ヒアドキュメント文字列には引用符とコンマが含まれますこれにより、通常の例外が実際にはハッシュ マークではなく引用符で区切られるため、最初の通常の例外は後#s"に終了し、その後に続くのはエラー メッセージが示すように、有効な通常の例外フラグではないコンマです。 . また、ヒアドキュメント式を配列内の個別の要素に分割するものもありませんarray($partner)。ヒアドキュメント文字列全体を含む単一の要素を持つ配列になります。

于 2013-01-27T15:59:18.587 に答える