RegEx sorun - Verilen sınıf etiketinin içeriği almak - preg_match (_all)

2 Cevap php

Ben verilen sınıf ile <p> etiketinin içeriği almak gerekir. Sınıf simplecomment olabilir ya da comment ... olabilir

Yani aşağıdaki kodu yazdı

preg_match("|(<p class=\"(simple)?comment(.*)?\">)(.*)<\/p>|ism", $fcon, $desc);

Ne yazık ki, hiçbir şey döndürür. Ancak ben etiket bitmeyen parçası kaldırmak if (<\/p>) o (etiket baştan belgenin sonuna kadar) çok uzun bir dize Returing, nasılsa çalışıyor ...

Ne benim düzenli ifade ile yanlış?

2 Cevap

http://simplehtmldom.sourceforge.net/ gibi bir dom çözümleyici kullanmayı deneyin

If I read the example code on simplehtmldom's homepage correctly you could do something like this:

$html->find('div.simplecomment', 0)->innertext = '';

Burada hızlı düzeltme şudur:

'|(<p class="(simple)?comment[^"]*">)((?:[^<]+|(?!</p>).)*)</p>|is'

Değişiklikler:

  • The construct (.*) will just blindly match everything, which stops your regular expression from working, so I've replaced those instances completely with more strict matches:
    1. ... comment(.*)? ... - Bu temelde, ya hep ya hiç maç olacak. O sıfır veya daha fazla non-" karakter (temelde, bu {[kapanış " karaktere kadar maç olacak maç olacak çünkü ben [^"]* ile bu yerini (4)]} özellik.
    2. ... >)(.*)<\/p> ... - Yine, bu çok fazla maç olacak. Ben olmayan tüm < karakterleri maç olacak etkin bir model ile değiştirilir ettik, ve o vurur kez {[(3)] tarafından takip eğer bir < bunu kontrol edecek }. Bu ise, aksi takdirde devam edecektir, (biz <p> etiketinin sonunda konum beri) eşleşen duracaktır.
  • Bu düzenli ifade hiçbir kullanımı vardır çünkü ben m bayrağı kaldırıldı.

But o (<p class="comment">...<p>...</p></p> hayal, o <p class="comment">...<p>...</p> maç olacak) güvenilir olmayacaktır.

Güvenilir yapmak için, özyinelemeli normal ifadeler veya (daha iyi) bir HTML ayrıştırıcı kullanmanız gerekir (bunu uğraşıyoruz XHTML olmadığını veya XML.) Bile kütüphaneleri (ki "düzgün" hatalı biçimlendirilmiş HTML işleyebilir orada vardır tarayıcıları gibi.)