これはいくつかのコードです
<br /> <br /> <br /> <br /> <br /> <br />
しかし
交換したい
<br /> fourth with <hr />
そしてこの出力
<br /> <br /> <br /> <hr /> <br /> <br />
私を助けてください
これはいくつかのコードです
<br /> <br /> <br /> <br /> <br /> <br />
しかし
交換したい
<br /> fourth with <hr />
そしてこの出力
<br /> <br /> <br /> <hr /> <br /> <br />
私を助けてください
おそらく、次のようなものが必要です。
<?php
$text = <<<EOT
<br /> 1 <br /> 2 <br /> 3 <br /> 4 <br /> 5 <br /> 6
<br /> 7 <br /> 8 <br /> 9 <br /> 10 <br /> 11 <br /> 12
<br /> 13 <br /> 14 <br /> 15 <br /> 16 <br /> 17 <br /> 18
EOT;
$tag = '<br \\/>';
$content = '[^<]*';
print preg_replace("/($content(?:$tag$content){3})$tag/", '$1<BREAK! />', $text);
?>
出力 ( ideone.com で見られるように):
<br /> 1 <br /> 2 <br /> 3 <BREAK! /> 4 <br /> 5 <br /> 6
<br /> 7 <BREAK! /> 8 <br /> 9 <br /> 10 <br /> 11 <BREAK! /> 12
<br /> 13 <br /> 14 <br /> 15 <BREAK! /> 16 <br /> 17 <br /> 18
とはいえ、これは苦痛であり、これに正規表現を使用するべきではありません。
置換を 1 つだけ行いたい場合は、limit
引数をpreg_replace
次のように設定できます。
preg_replace("/($content(?:$tag$content){3})$tag/", '$1<BREAK! />', $text, 1);
^^limit
これは、次の場合にのみ機能します。
preg_replace("#<br /> 4#", "<hr /> 4", $str);
一般的なソリューションを探している場合、RegEx は最適なツールではありません。HTML/XML パーサーを使用します。
この特定のケースでは:
s/<br \/> 4/<hr \/> 4/
正規表現を使用する必要はありません。
echo str_replace(' <br /> 4', ' <hr /> 4', $str);