Php 删除多个<;p>;标记到单个标记
我需要替换所有:Php 删除多个<;p>;标记到单个标记,php,regex,Php,Regex,我需要替换所有: <p> </p> <p> </p> <p> </p> 与 使用regex我将如何执行此操作?如果这是一个界限良好的情况,您可以使用preg\u replace()通过以下方法实现: 正则表达式:(\s*)+ 替换:\1 解释demo:< p>尽管有些注释正确地指出用正则表达式解析HTML是危险的,在受控环境中或者当解析不是必需的时候(您的案
<p> </p>
<p> </p>
<p> </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> </p>/
//
给你:
"<p> </p>\n<p> </p>\n<p> </p>"
.replace(/(<p> <\/p>\n?)+/, "<p> </p>");
“\n\n”
.替换(/(\n?+/,“”);
如果不想使用正则表达式,请使用str\u replace
用一个替换所有的
,直到没有更改为止
$input2 = $input_text;
$end = false;
while(!$end){
$temp_text=str_replace("<p> </p><p> </p>","<p> </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> </p><p> </p>","<p> </p>", $input2);
if($temp_text == $input2){
$end = true;
}
else{
$input2 = $temp_text;
}
}