![](/img/trans.png)
[英]How to remove this empty <p><span> </span></p> tag using regular expression and php
[英]How to Remove the nested paragraph tag using Regular Expression in PHP?
我正在使用简单Html Dom通过Html进行解析。在这种情况下,如果它是嵌套方式,则无法加载<p>
标签
<p>Hello there <p>Some Content </p>outer content <p>Some More content</p></p>
我不知道如何使用Regex替换内部的<p></p>
标记。
我的预期输出是:
<p>Hello there Some content outer content Some More content</p>
有人请帮我完成这项工作
不允许嵌套p标签。 可以代替使用:
<p>Hello there <span>Some Content </span>outer content</p>
有关更多详细信息,请参见下面的链接
请尝试使用此功能删除<p></p>
标签
<?php function remove_p($input) {
$input=str_ireplace('<p>','',$input);
$input=str_ireplace('</p>','',$input);
return "<p>".$input."</p>";
}
?>
请查看如何使用此功能:
<?php $val = "<p>Hello there <p>Some Content </p>outer content <p>Some More content</p></p>";
echo remove_p($val);
?>
希望对您有帮助。
假设整个有问题的<p>
标签在一行中,则可以使用以下正则表达式
((?!^)<p>)|(<\\/p>(?!$))
(?!^)<p>)
与所有<p>
标记匹配,但字符串开头的<p>
除外
(<\\/p>(?!$)
匹配所有</p>
标记,但不包括字符串末尾的</p>
您可以将捕获的<p>
和</p>
替换为null并将其删除。
这是一个工作演示
编辑:
由于您输入的是html文件,因此您可以尝试使用此更新的正则表达式
(<p>)((?!<\\/p>).)*?(<p>).*?(<\\/p>)
(<p>)
搜索<p>
标签
((?!<\\/p>).)*?(<p>)
捕获<p>
一个<p>
标记内的</p>
标记,中间没有(嵌套的<p>
标记) </p>
标记
.*?(<\\/p>)
捕获嵌套<p>
的结束标记。
只需删除捕获组3和4,就可以删除嵌套的
标签。 您需要一次又一次地运行它,直到没有更多的匹配为止。
您可以在这里找到更新的正则表达式演示
更新:
使用此正则表达式(.*<p>)(((?!<\\/p>).)*?)(<p>)(.*?)(<\\/p>)(.*)
并将其替换为\\1\\2\\5\\7
,这将单独删除嵌套标记。
在这里演示
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.