2010-03-20 4 views
1

Comment puis-je résoudre ce problème?REGEX (. *) Et nouvelle ligne

REGEX: 
//REGEX 
$match_expression = '/Rt..tt<\/td> <td>(.*)<\/td>/'; 
preg_match($match_expression,$text,$matches1); 
$final = $matches1[1];  


//THIS IS WORKING 
<tr> <td class="rowhead vtop">Rtštt</td> <td><img border=0 src="http://somephoto"><br /> <br />INFO INFO INFO</td> 
</tr> 


//THIS IS NOT WORKING 
<tr> <td class="rowhead vtop">Rtštt</td> <td> <br /> 
IFNO<br /> 
INFO<br /></td></tr> 
+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/ 1732454 # 1732454 –

Répondre

5

Et c'est exactement pourquoi vous ne devriez pas utiliser les expressions régulières pour extraire des données d'un document HTML. La structure de balisage est si arbitraire qu'elle est tout simplement trop peu fiable, c'est pourquoi je ne vais pas vous donner une expression régulière correcte à utiliser car il n'y en a pas (les solutions données par d'autres utilisateurs pourraient fonctionner ... jusqu'à ce que ils cassent). Utilisez un analyseur DOM comme DOMDocument ou phpQuery pour extraire des données de votre document.

est un exemple ici en utilisant phpQuery:

$pq = phpQuery::newDocumentFile('somefile.html'); 
$rows = $pq->find('td.rowhead.vtop:parent'); 

$matches = array(); 

foreach($rows as $row) { 
    $matches[] = $row->eq(1)->html(); 
} 
0
$s = explode('</tr>',$str); 
foreach($s as $v){ 
$m=strpos($v,"img border"); 
if($m!==FALSE){ 
    print substr($v,$m); 
} 
}