I know that:
preg_replace('<br\s*\/?>', '', $string);
如果$string的开头是<br><br/><br />
标签,我们该如何仅删除所有这些标签?(在我的情况下,$string是带有各种标签的html代码...)
将从$string中删除所有br标签...
只需添加适当的锚点(^
):
preg_replace('/^(?:<br\s*\/?>\s*)+/', '', $string);
这将匹配字符串起始处多个 <br>
标签。
(?:…)
是一个非捕获组,因为我们只使用括号来分组表达式而不是捕获它。修改器不是必需的 - (...)
同样可以工作,但是正则表达式引擎需要做更多的工作,因为它需要记住每个捕获结果的位置和长度。
你在正则表达式中忘记了PCRE的定界符。尝试使用如下内容:
$string = preg_replace('/^\s*(?:<br\s*\/?>\s*)*/i', '', $string);
这也会删除换行标记前、中、后的前导空格字符。
一些解释:
^\s*
将匹配字符串开头的任何空格字符(?:<br\s*\/?>\s*)*
将匹配零个或多个BR
标记(HTML和XHTML)后面跟着可选的空格字符$string = preg_replace( '@^(<br\\b[^>]*/?>)+@i', '', $string );
应该匹配:
<br>
<br/>
<br style="clear: both;" />
etc
<br>
标签都有效吗? - qitch
(?:...)
。 - salathe