从字符串中删除无用的段落标记

use*_*501 4 php regex

如果我有一个像这样的字符串:

<p>&nbsp;</p>
<p></p>
<p class="a"><br /></p>
<p class="b">&nbsp;</p>
<p>blah blah blah this is some real content</p>
<p>&nbsp;</p>
<p></p>
<p class="a"><br /></p>
Run Code Online (Sandbox Code Playgroud)

我怎样才能把它变成:

<p>blah blah blah this is some real content</p>
Run Code Online (Sandbox Code Playgroud)

正则表达式需要获取&nbsp;s和空格.

Edw*_*ang 15

$result = preg_replace('#<p[^>]*>(\s|&nbsp;?)*</p>#', '', $input);

这不会捕获输出中的文字字符,但这是非常罕见的.

由于您正在处理HTML,如果这是用户输入,我可能会建议使用HTML Purifier,它也将处理XSS漏洞.您希望在那里删除空p标签的配置设置是%AutoFormat.RemoveEmpty.


Pet*_*ton 5

这个正则表达式将违反您的示例:

<p[^>]*>(?:\s+|(?:&nbsp;)+|(?:<br\s*/?>)+)*</p>