Avere un problema di corrispondenza di un elemento HTML usando preg_match
-
19-09-2019 - |
Domanda
Sto cercando di abbinare un elemento HTML, ma non credo che il suo corrispondente da $ titoli è vuota -? Qualcuno mi può correggere
Il mio preg_match:
preg_match_all("~<td align=\"left\" width=\"50%\">[^<]*. <b><a href=\"(.*?)\">[^<]*</a>~i", $main, $titles);
Esempio HTML per abbinare:
//<td align="left" width="50%">1. <b><a title="Wat" href="http://www.exmple.com/q.html">Wat</a></b><br></td>
Mi sto perdendo qualcosa?
Grazie a tutti per tutto l'aiuto
Soluzione
Non c'è niente da corrispondere title="Wat"
nel tag <a>
.
Io suggerirei di non usare una regex per analizzare, però. Io non sono troppo familiarità con PHP, ma sono sicuro che ha già qualcosa che farà la maggior parte del lavoro per voi.
Altri suggerimenti
Come ho detto nel mio commento regex è raramente, se mai lo strumento ideale per utilizzare quando si cerca di analizzare HTML. Im Foing utilizzare un esempio di Zend_Dom_Query, uno dei ecomponetns th in Zend Framework, semplicemente perché i havent visto consigliato su una di queste domande ancora. Quindi ...
$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);
}
}