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 中的正则表达式和基本概念是相同的:匹配两个或多个您感兴趣的字符串实例并将其替换为单个实例。

于 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.

将所有替换<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 回答