PHP:如何删除字符串末尾的所有出现的换行符

时间:2013-08-28 16:05:46

标签: php preg-replace

如何在字符串末尾删除所有出现的换行符。

$string = "Hello<br/>my Text<br> <br/> <br /> <br              /> <br      >";

我想得到这样的结果:Hello<br/>my Text

这没有用,因为 $string = preg_replace('#(( ){0,}<br( {0,})(/{0,1})>){1,}$#i', '', $string); 没用。

这是一篇类似的帖子,虽然没有解决我的问题。 remove <br>'s from the end of a string

非常感谢你 汤姆

3 个答案:

答案 0 :(得分:1)

这就是正则表达式的构建方式:

#<br>#                   // bare <br>
#<br */?>#               // <br> with internal spaces and maybe a slash
#(?: *)?<br */?>#        // maybe there are spaces in front
#(?: *)?<br */?>$#       // at the end of the line
#(?:(?: *)?<br */?>)+$#  // the whole thing one or more times at the end of the line

这样:

echo preg_replace('#(?:(?: *)?<br */?>)+$#', '', 'Hello<br/>my Text<br> <br/> <br /> <br              /> <br      >');
// Output: Hello<br/>my Text

Regular expression visualization

Debuggex是你和我的朋友。

答案 1 :(得分:0)

REGEX并非真正用于DOM解析,但如果您需要/选择使用它,则应该这样做:

preg_replace('/<br *\/?>(?!\w)/', '', $string);

删除任何<br />标签(带有我们的空格或自动关闭斜线),后面没有字母数字字符,因此保留第一个。

但是,这突出了REGEX对诸如此类问题的限制。您可能希望保留一个未跟随字母数字字符的标记。在这种情况下,REGEX可以提供的不是很多。相比之下,DOM解析器可以迭代地删除尾随标记,因为每个标记都是容器的最后一个子标记。

您仍会在删除的代码之间留下空格,但您可以trim()结果或在其上运行更多REGEX:

preg_replace('/\s*$/', '', $string);

答案 2 :(得分:0)

这完成了这项工作。 $string=preg_replace('/\s+/',' ', trim($string)); echo preg_replace('#(?:(?: *)?<br */?>)+$#', '', $string);