2016-03-24 13 views
1

Yeni satır karakterinin takip ettiği HTML kapanış etiketlerini yakalamak ve bunları yalnızca HTML etiketiyle değiştirmek istiyorum. Bu içinePHP RegExp: Tüm HTML kapanış etiketlerini ve ardından yeni satır karakterini yakalayın

<ul>\n 
    <li>element</li>\n 
</ul>\n\n 
<br/>\n\n 
Some text\n 

:

Mesela ben bu açmak istiyor En kısa sürede

preg_match_all('/(<\/[a-zA-Z]*>|<[a-zA-Z]*\/>)\n/s', $in, $matches); 

:

<ul> 
    <li>element</li> 
</ul>\n 
<br/>\n 
Some text\n 

Sorun regex ile \n karakterleri yakalamak edemezler Örneğimde bir yere yerleştirdiğimde, eşlemeler dizisi boş değerler döndürecek.

Sadece \n karakter tek başına maç çalışırsanız, hepsini bulduğu İlginç şey:

preg_match_all('/\n/s', $in, $matches); 
+0

Yani \ n \ n ile değiştirmek yerine \ n \? Tek başına eşleşen bir şeylerin yerini almayacak. – Egg

cevap

0

Dene:

preg_match_all('/(<\/[a-zA-Z]*>|<[a-zA-Z]*\/>)\\n/s', $in, $matches); 

Sen "\" karakteri kaçmak zorunda.

0

Aşağıdaki gibi bir şey kullanabilirsiniz:

(<[^>]+>)$\R{2} 
# capture anything between a pair of <and> at the end of the line 
# followed by two newline characters 
Sen multiline modunu kullanmak gerekir

, a demo on regex101.com bakın. PHP yılında
bu olacaktır:

$regex = '~(<[^>]+>)$\R{2}~m'; 
$string = preg_replace($regex, "$1", $your_string_here); 

Genellikle DomDocument ayrıştırıcı korumak veya boşlukları atmak imkanı sunar, böylece yerine bu kullanmanın daha iyi olabilir.

İlgili konular