Come trovare un URL da un tenore, in PHP?
-
11-09-2019 - |
Domanda
bisogno di un semplice preg_match, che troverà "c.aspx" (senza virgolette) nel contenuto se trova, restituirà l'intero URL. Come esempio
$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212">New message</a><br/>';
ora, dovrebbe essere funzione preg_match "c.aspx" dal contenuto $ e darà un uscita come
"/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212"
Il contenuto $ dovrebbe avere più link tranne "c.aspx". Io non li voglio. Voglio solo tutto URL che hanno "c.aspx".
Per favore fatemi sapere come posso farlo.
Soluzione
Si utilizza DOM per analizzare HTML, non regex. È possibile utilizzare espressioni regolari per analizzare il valore di attributo però.
Modifica:. Aggiornato esempio in modo che controlla per c.aspx
$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212">New message</a>
<a href="#bar">foo</a>
<br/>';
$dom = new DOMDocument();
$dom->loadHTML($content);
$anchors = $dom->getElementsByTagName('a');
if ( count($anchors->length) > 0 ) {
foreach ( $anchors as $anchor ) {
if ( $anchor->hasAttribute('href') ) {
$link = $anchor->getAttribute('href');
if ( strpos( $link, 'c.aspx') ) {
echo $link;
}
}
}
}
Altri suggerimenti
Se si desidera trovare qualsiasi stringa quotata con c.aspx in esso:
/"[^"]*c\.aspx[^"]*"|'[^']*c\.aspx[^']*'/
Ma in realtà, la maggior parte per l'analisi HTML che si starebbe meglio con una sorta di DOM parser in modo che si può essere sicuro di quello che stai corrispondenza è davvero un href.