我需要全部替换:
<p> </p>
<p> </p>
<p> </p>
和
<p> </p>
使用正则表达式我将如何去做?
如果这是一个有界的情况,您可以使用以下方法preg_replace()
来实现:
正则表达式:(<p> <\/p>\s*)+
替换:\1
尽管一些评论正确指出使用正则表达式解析 HTML 是危险的,但在受控环境中或不需要解析时(我相信你的情况,因为你似乎只想替换一些东西)我认为它是最优化的解决方案(尽管不完美)。
无论哪种方式,如果我正确理解了您的问题,您想用单个实例替换多个重复项吗?在这种情况下,它可以通过正则表达式简单地实现,如下所示:
"<br><br>a<br><br><br>b".replace(/(<br>){2,}/g, '<br>');
该示例在 javascript 中(因为我可以从浏览器控制台对其进行测试),但是 php 中的正则表达式和基本概念是相同的:匹配两个或多个您感兴趣的字符串实例并将其替换为单个实例。
您应该使用html 解析器而不是正则表达式。
但是如果p
标签没有嵌套,你可以使用这个正则表达式
/<p> </p>/
干得好 :
"<p> </p>\n<p> </p>\n<p> </p>"
.replace(/(<p> <\/p>\n?)+/, "<p> </p>");
如果您不想使用正则表达式,请使用str_replace
.
将所有替换<p> </p><p> </p>
为一个并执行此操作,直到没有更改为止。
$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;
}
}
str_replace()
您可能需要添加换行符 ( )\n
和/或换行符 ( \r
)。