正如标题所说,我有一个这样的字符串:
$string = "Hello World<br>hello world<br><br>";
现在我想摆脱这个字符串末尾的<br>
s所以它看起来像这样:
$string = "Hello World<br>hello world";
我试过这个:
preg_replace('/^(<br>)*/', "", $string);
但这没用。也许有人知道正确的正则表达式。
问候彼得
你很接近,你在正则表达式的开头使用了^,这意味着“匹配字符串的开头”。你最后想要$,这意味着“匹配字符串的结尾”。
preg_replace('/(<br>)+$/', '', $string);
对于其他任何人来说,就像我一样,寻找一种从字符串末尾删除任何所有break标记的方法,包括:
<br> <br/> <br /> <br /> <br >
我用了:
$string = preg_replace('#(( ){0,}<br( {0,})(/{0,1})>){1,}$#i', '', $string);
效果很好。如果它们之间有空白区域,这也会剥离它们。你需要调整任何\ n \ r等,如果这是你需要的。
我认为,从字符串末尾删除所有空格和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)
试试preg_replace('/(<br>)+$/', "", $string);
编辑:糟糕,现在应该工作。
正则表达式是强大的,但我认为这种情况更简单,rtrim应该工作
$string = rtrim($string,'<br>');
你可以试试strip_tags函数: