【发布时间】:2011-02-19 12:12:43
【问题描述】:
我知道:
preg_replace('<br\s*\/?>', '', $string);
将从 $string 中删除所有 br 标记...
我们如何才能删除所有<br><br/><br /> 标签,只有它们位于$string 的开头? (在我的例子中,$string 是带有各种标签的 html 代码......)
【问题讨论】:
我知道:
preg_replace('<br\s*\/?>', '', $string);
将从 $string 中删除所有 br 标记...
我们如何才能删除所有<br><br/><br /> 标签,只有它们位于$string 的开头? (在我的例子中,$string 是带有各种标签的 html 代码......)
【问题讨论】:
只需添加适当的锚 (^):
preg_replace('/^(?:<br\s*\/?>\s*)+/', '', $string);
这将匹配多个<br>s 在字符串的开头。
(?:…) 是一个非捕获组,因为我们在这里只使用括号对表达式进行分组,而不是捕获它。修饰符并不是绝对必要的——(…) 也可以工作,但正则表达式引擎需要做更多的工作,因为它需要记住每个捕获的命中的位置和长度。
【讨论】:
(?:...)
<br>s 之间似乎没有空格……
您忘记了正则表达式中的delimiters for 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> 标签吗?