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

Tha*_*nos 5 php regex

我知道:

preg_replace('<br\s*\/?>', '', $string);
Run Code Online (Sandbox Code Playgroud)

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

我们怎样才能删除所有<br><br/><br />标签,只要它们位于$ string的最开头?(在我的例子中,$ string是带有各种标签的HTML代码......)

Kon*_*lph 19

只需添加一个合适的锚点(^):

preg_replace('/^(?:<br\s*\/?>\s*)+/', '', $string);
Run Code Online (Sandbox Code Playgroud)

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

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


Gum*_*mbo 5

您忘记了正则表达式中PCRE分隔符。尝试这个:

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

这还将删除换行标记之前、之间和之后的前导空白字符。

一些解释:

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