DIV elemanları için düzenli ifade

2 Cevap php

Ben örneğin HTML bu parça vardı ki:

<div id="gallery2" class="galleryElement">
  <h2>My Photos</h2>
  <div class = "imageElement">
    <h3>@Embassy - VIP </h3>
    <p><b>Image URL:</b>
      <a href = "http://photos-p.friendster.com/photos/78/86/77426887/1_119466535.jpg" target = "_blank">http://photos-p.friendster.com/photos/78/86/77426887/1_119466535.jpg</a></p>
      <a href = "http://photos-p.friendster.com/photos/78/86/77426887/1_119466535.jpg" title = "open image" class = "open"></a>
      <img src = "http://photos-p.friendster.com/photos/78/86/77426887/1_119466535.jpg" class = "full"/>
      <img src = "http://photos-p.friendster.com/photos/78/86/77426887/1_887303260m.jpg" class = "thumbnail"/>
  </div>
  <div class = "imageElement">
    <h3>@Embassy - VIP </h3>
    <p><b>Image URL:</b>
      <a href = "http://photos-p.friendster.com/photos/78/86/774534426887/1_119466535.jpg" target = "_blank">http://photos-p.friendster.com/photos/78/86/77426887/1_119466535.jpg</a></p>
      <a href = "http://photos-p.friendster.com/photos/78/86/774534426887/1_119466535.jpg" title = "open image" class = "open"></a>
      <img src = "http://photos-p.friendster.com/photos/78/86/774534426887/1_119466535.jpg" class = "full"/>
      <img src = "http://photos-p.friendster.com/photos/78/86/774534426887/1_887303260m.jpg" class = "thumbnail"/>
  </div>
</div>

I imageElement gibi her div class'ed ayrıştırmak ve bitiş div çifti kadar açılması <div class = "imageElement"> başlayarak bir dizi (metin olarak) içeriğini saklamak için uygun düzenli ifadeyi inşa etmek gerekir </div>. Ayrıca, gerçekten class = "imageElement" üzerine boşluklar vardır. Şimdiye kadar ifade var:

\&lt;div class = "imageElement"&gt;[\s\S\d\D]*&lt;/div&gt;

ancak yalnızca elementlerin bütün seti alır. Şimdiden teşekkürler.

2 Cevap

Bu burada oldukça yaygın bir soru (? "Nasıl bir düzenli ifade ile bu XML / HTML ayrıştırmak") ve ben size aynı cevabı vereceğim: yok.

Düzenli ifadeler bu tür bir şey de herkesin bildiği kötü. HTML / XML regex anlamda "normal" değildir.

PHP güvenilir yapacak en az 3 XML ayrıştırıcıları (akla SimpleXML , DOMDocument and XMLReader yay) ile birlikte gelir. Bunlardan birini kullanın.

Bir örnek olarak Parse HTML With PHP And DOM bir göz atın.

Eğer yaşıyorsanız sorun bunu mümkün olduğunca küçük bir maç istiyorum nerede, mümkün olduğunca maçları yani *, açgözlü olduğunu gibi geliyor.

Divs içindeki veri içermiyorsa "</div>" sonra oldukça basit ayrıştırma tutabilirsiniz. Bu keyfi HTML verilerini (özellikle iç içe divs) içerebilir, daha fazla ayrıştırmak gerekir.

Temel kalırsa, regex olmadan her şeyi yapabilirdi. Biraz hackish var, ama sürece veri, basit ve beklendiği dediği gibi, gerçekten hızlı çalışması gerekir:

$chunks = explode($body, '<div class = "imageElement">');
array_shift($chunks);
$matches = array();
foreach($chunks as $chunk) {
    $pos = strpos('</div>', $chunk);
    if($pos) {
        $matches[] = substr($chunk, 0, $pos);
    {
}

Daha esnek bir şey gerekiyorsa, gerçek bir html ayrıştırıcı kullanmak.