php:从字符串的开头修剪br标签?

时间:2010-05-14 12:07:41

标签: php regex

我知道:

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

将从$ string中删除所有br标签...

如果它们位于$ string的最开头,我们如何删除所有<br><br/><br />标记? (在我的例子中,$ string是带有各种标签的html代码......)

3 个答案:

答案 0 :(得分:19)

只需添加适当的锚点(^):

preg_replace('/^(?:<br\s*\/?>\s*)+/', '', $string);

这将匹配字符串开头的多个<br> s

(?:…)是一个非捕获组,因为我们只使用括号来对表达式进行分组,而不是捕获它。修饰符并不是绝对必要的 - (…)也可以正常工作,但正则表达式引擎必须做更多工作,因为它需要记住每个捕获命中的位置和长度。

答案 1 :(得分:4)

您忘记了正则表达式中的delimiters for PCRE。试试这个:

$string = preg_replace('/^\s*(?:<br\s*\/?>\s*)*/i', '', $string);

这也将删除换行符之前,之间和之后的前导空白字符。

一些解释:

  • ^\s*将匹配字符串开头的任何空格字符
  • (?:<br\s*\/?>\s*)*将匹配零个或多个BR个标签(HTML和XHTML),后跟可选的空白字符

答案 2 :(得分:2)

$string = preg_replace( '@^(<br\\b[^>]*/?>)+@i', '', $string );

应匹配:

<br>
<br/>
<br style="clear: both;" />
etc