0

重複の可能性:
PHP、preg_replace、タグをタグattrに置き換えます

私は多くの参考文献を読みましたが、これは非常に理解しにくいです。

私のコードを改善するのを手伝ってください。

交換したい

<script src="core.js"></script> to <temp src="core.js"></temp>

私がそれをテストしている間、以下は私が望むものを実際に出力します。ただし、$ replaceには<temp、終了タグを置き換えることができるのはなぜですか?

$string = '<script src="core.js"></script>';
$pattern = '/^<script|<\/script>$/i';
  //    ^(start from script)    | (or)    $(end with script)
$replace = '<temp';
echo preg_replace($pattern, $replace, $string);

アウトプット

<temp src="core.js"></temp>

助けとアドバイスをありがとうございました。

4

2 に答える 2

2

正規表現を使用する必要がありますか?str_replaceだけを使用することはできませんか?

$string = '<script src="core.js"></script>';
echo str_replace("script", "temp", $string);

編集

本当に正規表現を使用する必要があると思われる場合は、終了タグ</script>が。だけに置き換えられているという問題があります<temp。かっこをキャプチャしてみてください。

$string = '<script src="core.js"></script>';
$pattern = '/(<\/?)script([^>]*>)$/i';
$replace = '$1temp$2';
echo preg_replace($pattern, $replace, $string);

ここでのパターンは次のように読み取ることができます。

  • (<\/?)<オプションでAの後に/
  • script:リテラル文字列script
  • ([^>]*>)>0回以上でなく、その後に>

置換文字列で$1は、最初の括弧で囲まれたパターンに一致するものを意味し、2番目のパターンは$2です。

于 2013-01-22T11:45:29.523 に答える
2

正規表現について質問したためにこれで質問に答えられない場合は申し訳ありませんが、str_replaceを使用できる場合は、一般的に使用する方が適切であり、はるかに高速です。

$result = str_replace('<script', '<temp', $string);
$result = str_replace('script>', 'temp>', $result);

ただし、これに伴う問題は、次のような文字列と一致しないことです。

<script src="core.js"></script >

私がやらなかった理由:

str_replace("script", "temp", $string);

たとえば、jsファイルがexample.script.jsと呼ばれる場合、変数に「script」という単語の他のメンションを含めることができるためです。

于 2013-01-22T11:45:50.970 に答える