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


How to remove ending blank paragraph from string?

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

<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>

提前感谢!

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

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

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

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

这里有一个递归函数:

<?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);