php: Bir dizenin başından br etiketleri Döşeme?

3 Cevap php

Ben biliyorum:

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

$ string tüm br etiketlerini kaldırır ...

Nasıl biz onlar $ string çok başında sadece eğer tüm <br><br/><br /> etiketleri kaldırabilirim? (Benim durumumda $ string çeşitli etiketleri html kodu ...)

3 Cevap

Sadece uygun bir çapa ekleyebilirsiniz (^):

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

Bu maç olacak çoklu <br> s at the beginning dize.

Biz sadece onu yakalamak, grup burada ifade parantez değil kullanmak beri (?:…) bir non-capturing grubudur. (…) gibi iyi çalışmak istiyorum, ama daha sonra her yakalanan hit pozisyonunu ve uzunluğunu hatırlamak gerekir, çünkü düzenli ifade motoru daha fazla iş yapmak zorunda olurdu - değiştirici kesinlikle gerekli değildir.

Eğer düzenli ifadede delimiters for PCRE unuttum. Bu deneyin:

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

Bu da satır sonu etiketleri arasında ve sonrasında gelen boşluk karakterleri kaldırmak olacaktır.

Bazı açıklama:

  • ^\s* sizin dize başında herhangi bir boşluk karakterleri maç olacak
  • (?:<br\s*\/?>\s*)* isteğe bağlı boşluk karakteri tarafından BR etiketleri (HTML ve XHTML ikisi) sıfır veya daha çok tekrarı maç olacak
$string = preg_replace( '@^(<br\\b[^>]*/?>)+@i', '', $string );

Uymalıdır:

<br>
<br/>
<br style="clear: both;" />
etc