去掉 从字符串的末尾开始

问题描述 投票:13回答:6

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

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

现在我想摆脱这个字符串末尾的<br>s所以它看起来像这样:

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

我试过这个:

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

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

问候彼得

php regex preg-replace
6个回答
18
投票

你很接近,你在正则表达式的开头使用了^,这意味着“匹配字符串的开头”。你最后想要$,这意味着“匹配字符串的结尾”。

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

10
投票

对于其他任何人来说,就像我一样,寻找一种从字符串末尾删除任何所有break标记的方法,包括:

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

我用了:

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

效果很好。如果它们之间有空白区域,这也会剥离它们。你需要调整任何\ n \ r等,如果这是你需要的。


2
投票

我认为,从字符串末尾删除所有空格和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) {
  echo 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)

1
投票

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

编辑:糟糕,现在应该工作。


1
投票

正则表达式是强大的,但我认为这种情况更简单,rtrim应该工作

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

-1
投票

你可以试试strip_tags函数:

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

© www.soinside.com 2019 - 2024. All rights reserved.