2

これはいくつかのコードです

<br />  <br />  <br />   <br /> <br />  <br /> 

しかし

交換したい

<br /> fourth with <hr />

そしてこの出力

<br />  <br />  <br />   <hr />  <br />   <br /> 

私を助けてください

4

4 に答える 4

1

おそらく、次のようなものが必要です。

<?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
于 2010-06-02T10:51:09.520 に答える
1

これは、次の場合にのみ機能します。

preg_replace("#<br /> 4#", "<hr /> 4", $str);

一般的なソリューションを探している場合、RegEx は最適なツールではありません。HTML/XML パーサーを使用します。

于 2010-06-02T10:39:24.133 に答える
0

この特定のケースでは:

s/<br \/> 4/<hr \/> 4/
于 2010-06-02T10:39:15.010 に答える
0

正規表現を使用する必要はありません。

echo str_replace(' <br /> 4', ' <hr /> 4', $str);
于 2010-06-02T10:42:56.653 に答える