RegExp

2010-08-30 23 views
9

Olası Çoğalt:
RegEx match open tags except XHTML self-contained tagsRegExp

Aşağıdaki dizesi vardır:

$str = " 
<li>r</li> 
<li>a</li> 
<li>n</li> 
<li>d</li> 
... 
<li>om</li> 
"; 

nasıl ilk n-inci <li> için HTML alabilirim etiketler?

Ex : n = 3 ; result = "<li>r<...>n</li>; 

Ben regexpi mümkünse istiyorum.

+11

[rant] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) –

+6

bilmeniz gereken tüm bulunabilir Burada: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – prodigitalson

+9

Neden tüm indirme? Çoğu yeni kızarma * bu hatayı bir kez yapar (ve umarım sadece bir kez). Ayrıca, OP tüm belgeleri ayrıştırmıyor, '

  • ' etiketlerinin bir dizgisi gibi görünüyor. Regex kullanmak için harika bir yer değil, ama * bu da * kötü değil. – FrustratedWithFormsDesigner

    cevap

    11

    Bunu beğendi.

    $dom = new DOMDocument(); 
    @$dom->loadHTML($str); 
    $x = new DOMXPath($dom); 
    
    // we wan the 4th node. 
    foreach($x->query("//li[4]") as $node) 
    { 
        echo $node->c14n() 
    } 
    

    Oh evet

    öğrenmek xpath, size gelecekte sorun çok yarayacaktır.

    +0

    DOMDocument üzerinden SimpleDML'yi her zaman tavsiye ederim. DOMDocument ek nesnelerin aşırı yüklenmesine ihtiyaç duyar (xpath gibi) ve elemanların seçilmesi ve içeriklerinin karmaşık bir şekilde seçilmesini sağlar. – 2ndkauboy

    +0

    @ Kau-Boy - ilginç, örnek göndermek ister misiniz? Ayrıca DOMDocument'in html'yi düzenli olarak çalıştırmanızı gerektirmediğini de unutmayın. Bu kendi başına benim için büyük bir kazan. –

    7

    SimpleXML @Byron oluşan, ancak Çözümü:

    $xml = simplexml_load_string($str); 
    
    foreach($xml->xpath("//li[4]") as $node){ 
        echo $node[0]; // The first element is the text node 
    } 
    

    DÜZENLEME: diğer nedeni gerçekten SimpleXML de böyle bir düğümün içeriğin kolay ayıklama olduğunu. Nesneyi çocuk düğümleriyle yazdırmak için print_r ($ xml) kullanabilirsiniz.

    +0

    Üçüncü satırda hata! –

    +0

    çocuk, Teşekkürler +1 –

    +0

    Düzeltildi, ipucu için teşekkürler! – 2ndkauboy