Avoir un problème correspondant à un élément HTML en utilisant preg_match

StackOverflow https://stackoverflow.com/questions/2233392

  •  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

Était-ce utile?

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);
   }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top