You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现移除<p与p&gt间内容的方法问询

解决PHP中移除转义HTML里的<p>标签及其内容的问题

你的核心问题在于正则表达式的写法有误,尤其是对\p的误用,以及没有匹配完整的转义<p>标签结构。我们来一步步修正:

问题分析

你要处理的是被双重转义的HTML内容(比如&amp;lt;p对应转义后的<p),目标是移除所有从转义的<p开始到</p>结束的整个片段。你的原正则/&amp;lt.*?\p&amp;gt|\s*/有两个明显问题:

  1. \p是Unicode字符属性匹配符(比如\p{L}匹配字母),不是字面量的p,所以无法正确匹配到p&amp;gt里的p;
  2. 只匹配到p&amp;gt就停止,没有覆盖后面的内容(比如- NEW&amp;lt;/p&amp;gt;),而且|\s*会错误删除所有空白字符,这应该不是你想要的。

正确实现方案

如果你的需求是移除所有转义的<p>标签及其内部内容,可以使用下面的正则:

// 定义正则模式
$pattern = '/&amp;lt;p.*?&amp;lt;\/p&amp;gt;/is';
// 执行替换
$cleanedContent = preg_replace($pattern, '', $_input);

正则解释:

  • &amp;lt;p:精准匹配转义后的<p开头;
  • .*?:非贪婪模式匹配任意字符(避免过度匹配到后面的其他标签);
  • &amp;lt;\/p&amp;gt;:精准匹配转义后的</p>结尾;
  • i:可选,忽略大小写(如果你的标签可能有<P>这种写法);
  • s:让.匹配换行符(如果<p>内容跨多行)。

测试效果

将你提供的输入代入后,会得到干净的结果:

<li class="level1 nav-2-1 first"> <a href="http://dev.example.com/women/"><span>Women </span></a> </li> <li class="level1 nav-2-2"> <a href="http://dev.example.com/men"><span>Men</span></a> </li>

如果你只想移除&amp;lt;p和p&amp;gt之间的内容(保留标签框架)

如果你的需求是仅删除标签内的属性和内容,保留&amp;lt;p和p&amp;gt,可以用这个正则:

$pattern = '/&amp;lt;p\K.*?(?=p&amp;gt)/is';
$cleanedContent = preg_replace($pattern, '', $_input);

解释:

  • \K:重置匹配起点,不会替换前面的&amp;lt;p;
  • (?=p&amp;gt):正向预查,匹配到p&amp;gt为止,不会替换这个结尾部分。

内容的提问来源于stack exchange,提问作者Holly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:06:43