【问题标题】:Remove <br>'s from the end of a string从字符串末尾删除 <br>
【发布时间】:2023-04-07 22:10:01
【问题描述】:

正如标题所说,我有一个这样的字符串:

$string = "Hello World<br>hello world<br><br>";

我想去掉字符串末尾的&lt;br&gt;s,使其如下所示:

$string = "Hello World<br>hello world";

我试过这个:

preg_replace('/^(<br>)*/', "", $string);

但它没有用。 也许有人知道正确的正则表达式。

【问题讨论】:

  • 请注意,您的问题是“现在我想摆脱 's”... 将 &lt;br&gt; 放在反引号 (`) 中,这样它就会显示出来:)
  • 有点不清楚你想要什么。您是否希望将字符串中的&lt;br&gt; 转换为要剥离的字符串末尾的\n(换行符)和&lt;br&gt;?所以在你的例子中,结果字符串应该是"Hello World\nhello world"?如果是这样,您可能需要两个正则表达式替换,一个用于换行符,另一个用于条形例。请编辑问题以更具体。
  • no 结果字符串应该看起来像这样“Hello World
    hello world”。 NickAldwin 和 Alex Howansky 的解决方案可以解决问题。再次感谢。

标签: php regex preg-replace


【解决方案1】:

试试preg_replace('/(&lt;br&gt;)+$/', "", $string);

编辑:糟糕,现在应该可以了。

【讨论】:

    【解决方案2】:

    你已经接近了,你在正则表达式的开头使用了 ^,这意味着“匹配字符串的开头”。您希望 $ 在末尾,这意味着“匹配字符串的结尾”。

    preg_replace('/(<br>)+$/', '', $string);
    

    【讨论】:

    • 对于&lt;br /&gt;,这似乎对我有用:preg_replace('/(&lt;br \/&gt;)+$/', '', $string);
    • 如何查找和替换最后 4 个字符是
      标签
    【解决方案3】:

    仅适用于像我这样的其他人,正在寻找一种从字符串末尾删除所有中断标签的方法,包括:

    <br> <br/> <br /> <br              /> <br      >
    

    我用过:

    $string = preg_replace('#(( ){0,}<br( {0,})(/{0,1})>){1,}$#i', '', $string);
    

    效果很好。如果它们之间有空格,这也会剥离它们。如果您需要,您需要针对任何 \n\r 等进行调整。

    【讨论】:

    • 谢谢!你的解决方案对我很有用,但我还需要它从字符串的开头剥离它们,你知道我该怎么做吗?
    • 我没有时间测试它,但这应该从字符串的开头删除它们:$string = preg_replace('#^(( ){0,}
      ){1,}#i', '', $string);
    • 它也可以更容易:(?:\s*&lt;br *\/?&gt;\s*)+$ 用于结尾或^(?:\s*&lt;br *\/?&gt;\s*)+ 从开头开始烧烤所有带有或不带有斜线的 br 标签,以及斜线之前的任何空白或标签之前/之后
    【解决方案4】:

    你可以试试 strip_tags 函数:

    http://php.net/manual/en/function.strip-tags.php

    【讨论】:

    • 正如他所提到的,他只想要结束标签……所以strip_tags 删除所有出现的事件没有帮助。
    【解决方案5】:

    正则表达式很强大,不过我觉得这种情况更简单,rtrim应该可以工作

    $string = rtrim($string,'<br>');
    

    【讨论】:

    • 这并不像你想象的那样。它将以任意顺序从字符串末尾(如果存在)删除任何个字符&lt;br&gt; - 所以I like rhubarb&lt;br&gt; 将变成I like rhuba&lt;/footer&gt; 将变成&lt;/foote。 rtrim 有它的用途,但这不是一个。
    • 感谢有用的提示
    【解决方案6】:

    我认为,从字符串末尾删除所有空格和 BR 的最佳解决方案是:

    preg_replace('#(\s*<br\s*/?>)*\s*$#i', '', $string);
    

    在这里测试:

    $arr = [
      '<something>else that</needs>to <br>  <BR      />      <br/>  ',
      '<something>else that</needs>to <br>',
      '<something>else that</needs>to    <br/>  ',
      '<something>else that</needs>to     ',
      '<something>else that</needs>to<br/>',
      ];
    
    foreach ($arr as $string) {
     var_dump(preg_replace('#(\s*<br\s*/?>)*\s*$#i', '', $string));
    }
    

    打印出来:

    test.php:11:string '<something>else that</needs>to' (length=30)
    test.php:11:string '<something>else that</needs>to' (length=30)
    test.php:11:string '<something>else that</needs>to' (length=30)
    test.php:11:string '<something>else that</needs>to' (length=30)
    test.php:11:string '<something>else that</needs>to' (length=30)
    

    【讨论】:

    • 小心,如果最后有大约 3000 个
      ,PHP 会抛出异常
    猜你喜欢
    • 2019-09-05
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多