Come abbinare questo usando preg_match

Sto cercando di get get la prima tabella compresi i tag html utilizzando preg_match, ma non funziona qui è quello che sto cercando

$con='<table class="first"> <tr><td>31231</td></tr> <tr><td>25235</td></tr> </table> <table class="second"> <tr><td>333</td></tr> <tr><td>333</td></tr> </table>'; preg_match('/<table class="first">[^~]+<\/table>/i',$con,$match);//It's also includes second table preg_match('/<table class="first">[^~]+?<\/table>/i',$con,$match);//Not matching anything.. 

Per favore aiuto … PS: Non voglio usare DOM o altro metodo …. solo espressioni regolari.

Perché la prima espressione corrisponda alla seconda tabella è che preg_match è "avido" per impostazione predefinita. Ciò significa che se stai cercando <table>(.*)</table> otterrà tutto tra la prima partita di <table> fino all'ultima partita di </table> . Puoi renderlo "ungreedy" aggiungendo il modificatore U.

 preg_match('/<table class="first">[^~]+<\/table>/iU',$con,$match); 

Quando si utilizza il modificatore "ungreedy", si fermerà alla prima corrispondenza di </table>

Ci sono diversi modificatori di pattern che puoi usare.

prova questo

 preg_match('/<table class="first">.+?<\/table>/is',$con,$match); 

Se stavi per attraversare le Alpi, quale di questi useresti?

Coltello da cucinaRange Rover

Regex è quasi sempre lo strumento sbagliato per la modifica di HTML. È una ctriggers idea Vuoi sapere come usare espressioni regolari per modificare l'HTML? La risposta è: no . Come in, dimenticalo. Lascialo. Andare in vacanza. Sei un ragazzo intelligente: fai qualcos'altro .

In questo caso, ciò che dovresti fare è utilizzare i methods DOM, come previsto da una libreria PHP integrata progettata per svolgere questa attività .

 $dom = new DOMDocument; $dom->loadHTML($yourHTML); $xpath = new DOMXPath($dom); $table = $xpath->query('//table[@class="first"]'); 

Il secondo sta funzionando,

 $con='<table class="first"> <tr><td>31231</td></tr> <tr><td>25235</td></tr> </table> <table class="second"> <tr><td>333</td></tr> <tr><td>333</td></tr> </table>'; preg_match('/<table class="first">[^~]+?<\/table>/i',$con,$match2); print_r($match2); 

Testato su http://writecodeonline.com/php/