0

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

$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); 没有工作。

这是一个类似的帖子,但没有解决我的问题。 从字符串末尾删除 <br>

非常感谢汤姆

4

3 回答 3

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是您 [和我] 的朋友。

于 2013-08-28T16:31:10.510 回答
0

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

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

这将删除任何<br />不紧跟字母数字字符的标签(我们的没有空格或自闭合斜杠),因此保留第一个。

但是,这突出了 REGEX 在此类问题上的局限性。您可能希望保留一个后面没有字母数字字符的标签。在这种情况下,REGEX 可以提供的东西不多。相比之下,DOM 解析器可以迭代地删除尾随标签,因为每个标签都是容器的最后一个孩子。

您仍然会在已删除的标签之间留下空格,但您可以只trim()得到结果或在其上运行进一步的 REGEX:

preg_replace('/\s*$/', '', $string);
于 2013-08-28T16:11:53.037 回答
0

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

于 2013-09-04T11:57:32.297 回答