如何从字符串中删除结束空白段落?

时间:2015-01-21 18:57:41

标签: php html regex

在我的数据库中,某些文本存储为

<p>texxxxxxxxxxt1</p>
<p>&nbsp;</p>
<p>textttttttttt2</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>teeeeeeeeeext3</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>

当我展示它们时,我希望删除那些最终空白......我已经尝试了很多东西,但它们都没有工作...... 我想过

$content = preg_replace("#(<p>&nbsp;<\/p>)+$#", '', $content);
$content = preg_replace("#(<p>&nbsp;<\/p>\r)+$#", '', $content);

和其他人但是他们因为换线而无法工作......任何想法? 最终结果应该是

<p>texxxxxxxxxxt1</p>
<p>&nbsp;</p>
<p>textttttttttt2</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>teeeeeeeeeext3</p>
提前谢谢!

3 个答案:

答案 0 :(得分:0)

如果你最后只有<p>&nbsp;</p>,你可以使用:

([\n\r]*<p>&nbsp;<\/p>)*$

演示:https://regex101.com/r/rS3uY3/1

答案 1 :(得分:0)

如何将字符串分解为数组(在换行符上),然后从数组的后面循环。如果它等于<p>&nbsp;</p>,则将其从数组中弹出。最后将数组连接回一个字符串。

答案 2 :(得分:0)

这是一个递归函数:

<?php
$str = "<p>text1</p>
<p>&nbsp;</p>
<p>text2</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>text3</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>";
$substring = "<p>&nbsp;</p>";

function magic($str, $substring) {
    $str = trim(rtrim($str));
    if (substr($str, (strlen($str) - strlen($substring)), strlen($str)) == $substring) {
        $str = trim(rtrim(substr($str, 0, strlen($str) - strlen($substring))));
        $str = magic($str, $substring);
    }
    return $str;
}

echo magic($str, $substring);