Domanda

Voglio analizzare il contenuto da

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

Come posso farlo con regex, php e preg match?

È stato utile?

Soluzione

questo lo riassume abbastanza bene.

In breve, non usare le espressioni regolari per analizzare HTML. Invece, guardate le classi DOM e soprattutto DOMDocument :: loadHTML

Altri suggerimenti

Se si dispone di un documento HTML, davvero non dovrebbe usare le espressioni regolari per analizzarlo:. HTML è solo che non "regolare" basta che

Una soluzione di gran lunga migliore sarebbe quella di caricare il documento HTML usando un parser DOM - per esempio, DOMDocument::loadHTML e query XPath spesso fare una gran bella lavoro!

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

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

@OP, ecco un modo

$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";
}

produzione

$ php test.php
content

content

content

 multiline
content
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top