Avoir un problème correspondant à un élément HTML en utilisant preg_match
-
19-09-2019 - |
Question
Je suis en train de faire correspondre un élément HTML, mais je ne pense pas que son correspondant depuis les titres $ est vide - quelqu'un peut me corriger
Mon preg_match:
preg_match_all("~<td align=\"left\" width=\"50%\">[^<]*. <b><a href=\"(.*?)\">[^<]*</a>~i", $main, $titles);
Exemple HTML pour correspondre à:
//<td align="left" width="50%">1. <b><a title="Wat" href="http://www.exmple.com/q.html">Wat</a></b><br></td>
Est-ce que je manque quelque chose?
Merci à tous pour toute aide
La solution
Il n'y a rien à correspondre title="Wat"
dans la balise <a>
.
Je vous suggère de ne pas utiliser une expression rationnelle pour analyser cependant. Je ne suis pas trop familier avec PHP, mais je suis sûr qu'il a déjà quelque chose qui va faire la plupart du travail pour vous.
Autres conseils
Comme je l'ai dit dans mon commentaire est regex rarement si jamais l'outil approprié à utiliser lorsque vous essayez d'analyser html. Im Foing utiliser un exemple de Zend_Dom_Query, l'un des e ecomponetns dans Zend Framework simplement parce que je nai vu recommandé sur l'une de ces questions encore. Alors ...
$dom = new Zend_Dom_Query($htmlHaystack);
$anchors = $dom->query('//td/a[@title]'); // xpath here
if(count($anchors) > 0)
{
$titles = array();
foreach($anchors as $element)
{
$titles[] = $element->getAttribute('title');
}
}
else
{
$title = null;
}
$string='<td align="left" width="50%">1. <b><a title="Wat" href="http://www.exmple.com/q.html">Wat</a></b><br></td>';
$s = explode("</a>",$string);
foreach($s as $k){
if (strpos($k,"href")!==FALSE){
echo preg_replace('/.*href="|">.*/ms',"",$k);
}
}