我正在使用简单的Html Dom 来解析Html。在此我无法加载<p>
标记(如果它是嵌套的方式)
<p>Hello there <p>Some Content </p>outer content <p>Some More content</p></p>
我不知道如何使用正则表达式替换内部<p></p>
标记。
我的预期输出是:
<p>Hello there Some content outer content Some More content</p>
有人请帮助我完成这项工作
答案 0 :(得分:0)
不允许使用嵌套的p标签。取而代之的是你可以使用:
<p>Hello there <span>Some Content </span>outer content</p>
有关详细信息,请参阅以下链接
答案 1 :(得分:0)
请尝试使用此功能删除<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);
?>
希望,这可能会对你有所帮助。
答案 2 :(得分:0)
假设您的整个有问题的<p>
标记在一行中,您可以使用以下正则表达式
((?!^)<p>)|(<\/p>(?!$))
(?!^)<p>)
匹配所有<p>
代码,但不包括字符串开头的<p>
(<\/p>(?!$)
匹配所有</p>
代码,但不包括字符串末尾的</p>
您只需将这些捕获的<p>
和</p>
替换为null,然后将其删除即可。
这是一个有效的demo
编辑:
由于您输入的是html文件,因此您可以尝试使用此更新的正则表达式
(<p>)((?!<\/p>).)*?(<p>).*?(<\/p>)
(<p>)
搜索<p>
代码
((?!<\/p>).)*?(<p>)
在第一个<p>
代码中捕获<p>
代码,其中没有任何</p>
代码(嵌套<p>
代码)
.*?(<\/p>)
捕获嵌套<p>
的结束标记。
只需删除捕获组3和4,即可删除嵌套的
标记。你需要一次又一次地运行它,直到没有更多的匹配。
您可以找到更新的正则表达式演示here
更新:
使用此正则表达式(.*<p>)(((?!<\/p>).)*?)(<p>)(.*?)(<\/p>)(.*)
并将其替换为\1\2\5\7
,这将仅删除嵌套标记。
演示here