Multi-line HTML yorumlar için regex (preg_match_all)

3 Cevap php

Ben örneğin çok yorumladı-out PHP dizileri ile bir html belge var:

<!-- Array
(
[key] => 0
)
-->

PHP kullanarak, ben nedense sadece bu yorumlarda (göz ardı edilmesi gereken diğer yorumlar vardır) için HTML ayrıştırmak ve içeriğini ayıklamak gerekir. I preg_match_all kullanmaya çalışıyorum ama benim regex becerileri kadar çok değildir. Herkes bana doğru yönde işaret?

Herhangi bir yardım çok takdir!

3 Cevap

Üç gerçekler burada devreye girer

  1. Bir HTML belgesinde yer yok olduğu bir edebi "<!--" göstermek ve not her yerde o "&amp;!-- olarak kaçtı olacaktır (Yorum ortalama ")
  2. Eğer change belge içerik, sadece o bitleri bulmak istediğiniz gibi (arama ve değiştirme belgeyi kırılma olasılığı yüksek olan, arama başına sahip değil) yok
  3. (normal HTML etiketleri aksine) HTML comments cannot be nested - Bu tüm fark yaratıyor

Yukarıdaki kombinasyon düzenli ifadeler can HTML komutları tanımlamak için kullanılır (lo beğenirsin) anlamına gelir.

Bu regex deneyin: <!-- Array([\s\S])*?-->. Maç grup bir "Array" yorumun kapanış dizisine kadar sonra her şeyi içerir.

Siz onlar için ne arıyor aslında emin olmak için bulundu bit kontrol daha aklı uygulayabilirsiniz.

Nasıl (Örneğin Simple HTML DOM) yorumlarınıza erişmek ve sonra kullanarak yeni hatlar için her yorum kontrol sağlayan bir HTML Parser kullanarak yaklaşık strpos.

$html = str_get_html('...HTML HERE...');
$comments = $html->find('comment');
foreach ( $comments as $comment ){
    if ( strpos($comment, "\n") !== false ){
        //process comment
    }
}