Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除多个<;p>;标记到单个标记_Php_Regex - Fatal编程技术网

Php 删除多个<;p>;标记到单个标记

Php 删除多个<;p>;标记到单个标记,php,regex,Php,Regex,我需要替换所有: <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> 与 使用regex我将如何执行此操作?如果这是一个界限良好的情况,您可以使用preg\u replace()通过以下方法实现: 正则表达式:(\s*)+ 替换:\1 解释demo:< p>尽管有些注释正确地指出用正则表达式解析HTML是危险的,在受控环境中或者当解析不是必需的时候(您的案

我需要替换所有:

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


使用regex我将如何执行此操作?

如果这是一个界限良好的情况,您可以使用
preg\u replace()
通过以下方法实现:

正则表达式:
(\s*)+

替换:
\1


解释demo:

< p>尽管有些注释正确地指出用正则表达式解析HTML是危险的,在受控环境中或者当解析不是必需的时候(您的案例我相信,因为您似乎只想替换一些东西),我认为它是最理想的解决方案(尽管不是完美的)。 不管怎样,如果我正确理解了你的问题,你想用一个实例替换多个副本吗?在这种情况下,它可以通过正则表达式简单地实现:

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


a


b”。替换(/(
){2,}/g,
”;

这个例子是用javascript编写的(我可以在浏览器控制台中测试),但正则表达式和基本概念在php中是相同的:匹配感兴趣字符串的两个或多个实例,并将其替换为单个实例。

您应该使用html解析器而不是正则表达式

但是如果
p
标记没有嵌套,您可以使用这个正则表达式

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

/
给你:

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

    .replace(/(<p>&nbsp;<\/p>\n?)+/, "<p>&nbsp;</p>");

\n

\n

” .替换(/(\n?+/,“

”);
如果不想使用正则表达式,请使用
str\u replace

用一个替换所有的

,直到没有更改为止

$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;
  }
}
$input2=$input\u text;
$end=false;
while(!$end){
$temp\u text=str\u replace(“”,“”,$input2);
如果($temp_text==$input2){
$end=true;
}
否则{
$input2=$temp\u text;
}
}

在带有
str\u replace()
的行中,您可能需要添加一个新行字符(
\n
)和/或换行符(
\r
)。

不要将HTML与regex组合。哦,对不起,我认为这是标记为javascript的!无论如何,
(\n?+
这是您的正则表达式!)感谢您在我使用asdasdasd时发表的评论。这个senerio没有任何变化。这个正则表达式有问题。
$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;
  }
}