我知道:
preg_replace('<br\s*\/?>', '', $string);
将从$ string中删除所有br标签...
如果它们位于$ string的最开头,我们如何删除所有<br><br/><br />
标记? (在我的例子中,$ string是带有各种标签的html代码......)
答案 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