Regex kullanarak html etiketleri ayrıştırma içerik

4 Cevap php

Ben içerik ayrıştırmak istiyorum

<td>content</td>
and
<td *?*>content</td>
and 
<td *specific td class*>content</td>

Nasıl regex, php ve gebelik maç ile bu yapabilirsiniz?

4 Cevap

I this oldukça iyi özetliyor sanırım.

Kısacası, HTML ayrıştırmak için normal ifadeler kullanmayın. Bunun yerine, DOM sınıfları bakmak ve özellikle DOMDocument::loadHTML

Bir HTML belge varsa, gerçekten bunu ayrıştırmak için normal ifadeler kullanmamalısınız: HTML sadece bunun için yeterli "normal" değildir.

Bir çok daha iyi bir çözüm DOM çözümleyici kullanarak HTML belgeyi yüklemek olacaktır - örneğin, DOMDocument::loadHTML and Xpath queries genellikle gerçekten harika bir iş yapmak!

<td>content</td>, <td>([^<]*)</td>

<td *specific td class*>content</td>, <td[^>]*class=\"specific_class\"[^>]*>([^<]*)<

@ OP, burada bir yol

$str = <<<A
<td>content</td>
<td *?*>content</td>
<td *specific td class*>content</td>
<td *?*> multiline
content </td>
A;

$s = explode("</td>",$str);
foreach ($s as $a=>$b){
    $b=preg_replace("/.*<td.*>/","",$b);
    print $b."\n";
}

çıktı

$ php test.php
content

content

content

 multiline
content