Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从字符串中删除无用的段落标记_Php_Regex - Fatal编程技术网

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

Php 从字符串中删除无用的段落标记,php,regex,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>&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>


这是一些真实的内容


我怎样才能把它变成:

<p>blah blah blah this is some real content</p>
这是一些真实的内容


正则表达式需要选择s和空格。

此正则表达式将与您的示例相反:

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

$result=preg_replace('#]*>(\s?)*

#','$input); 这不会捕获输出中的文字字符,但这种情况非常少见


由于您正在处理HTML,如果这是用户输入,我可能建议使用HTML净化器,它还将处理XSS漏洞。您希望在此处删除空p标记的配置设置是%AutoFormat.RemoveEmpty。

正如最初的应答器所述,regex不是这里的最佳解决方案,您需要的是某种html剥离器

此网站上的功能:

应该可以帮助您,您只需要使用一点字符串操作来获得新行,而不是返回到您想要的格式

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