0

すべてを置き換える必要があります:

<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>

<p>&nbsp;</p>

正規表現を使用して、これを行うにはどうすればよいですか?

4

5 に答える 5

1

これが十分に制限されたケースである場合は、次の方法preg_replace()でそれを達成するために使用できます。

正規表現:(<p>&nbsp;<\/p>\s*)+
置換:\1

デモの説明: http://regex101.com/r/vB5sZ0

于 2013-03-21T13:19:54.353 に答える
0

正規表現を使用してHTMLを解析することは危険であることを正しく指摘しているコメントにもかかわらず、制御された環境または解析が必要ない場合(あなたの場合、いくつかのものだけを置き換えたいと思われるため)、それが最も最適なソリューションであると考えています(完璧ではありませんが)。

いずれにせよ、私があなたの質問を正しく理解していれば、複数の重複を単一のインスタンスに置き換えたいですか? その場合、次の行に沿った正規表現によって簡単に実現できます。

 "<br><br>a<br><br><br>b".replace(/(<br>){2,}/g, '<br>');

その例は JavaScript で書かれています (ブラウザ コンソールからテストできます) が、正規表現と基本的な概念は php でも同じです: 関心のある文字列の 2 つ以上のインスタンスに一致し、それを 1 つの文字列に置き換えます。実例。

于 2013-03-21T13:20:07.513 に答える
0

正規表現の代わりにhtml パーサーを使用する必要があります。

ただし、pタグがネストされていない場合は、この正規表現を使用できます

/<p>&nbsp;</p>/
于 2013-03-21T13:21:06.563 に答える
0

どうぞ :

"<p>&nbsp;</p>\n<p>&nbsp;</p>\n<p>&nbsp;</p>"

    .replace(/(<p>&nbsp;<\/p>\n?)+/, "<p>&nbsp;</p>");
于 2013-03-21T13:21:44.753 に答える
0

正規表現を使用したくない場合は、str_replace.

すべてを 1 つに置き換え<p>&nbsp;</p><p>&nbsp;</p>、変更がなくなるまでそれを行います。

$input2 = $input_text;
$end = false;

while(!$end){
  $temp_text=str_replace("<p>&nbsp;</p><p>&nbsp;</p>","<p>&nbsp;</p>", $input2);
  if($temp_text == $input2){
    $end = true;
    }
  else{
    $input2 = $temp_text;
  }
}

の行では、改行文字 ( ) や改行 ( )str_replace()を追加する必要がある場合があります。\n\r

于 2013-03-21T13:26:02.417 に答える