php: обрезать теги br с начала строки? - PullRequest
5 голосов
/ 14 мая 2010

Я знаю, что:

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

удалит все теги br из $ string ...

Как мы можем удалить все <br><br/><br /> теги, только если они находятся в самом начале строки $? ($ string в моем случае - это HTML-код с различными тегами ...)

Ответы [ 3 ]

19 голосов
/ 14 мая 2010

Просто добавьте соответствующий якорь (^):

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

Это будет соответствовать несколько <br> s в начале строки.

(?:…) является не захватывающей группой , поскольку здесь мы используем только круглые скобки для группировки выражения, а не для его захвата. Модификатор не является строго необходимым - (…) будет работать так же хорошо, но механизм регулярных выражений должен будет выполнять больше работы, потому что тогда ему нужно будет помнить позицию и длину каждого захваченного удара.

4 голосов
/ 14 мая 2010

Вы забыли разделители для PCRE в своем регулярном выражении. Попробуйте это:

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

Это также удалит начальные пробельные символы до, между и после тегов разрыва строки.

Некоторые объяснения:

  • ^\s* будет соответствовать любым пробельным символам в начале вашей строки
  • (?:<br\s*\/?>\s*)* будет соответствовать нулю или большему количеству вхождений тегов BR (как HTML, так и XHTML), за которыми следуют дополнительные пробельные символы
2 голосов
/ 14 мая 2010
$string = preg_replace( '@^(<br\\b[^>]*/?>)+@i', '', $string );

Должно совпадать:

<br>
<br/>
<br style="clear: both;" />
etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...