如何在字符串末尾删除所有出现的换行符。
$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
非常感谢你 汤姆
答案 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
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);