Comment trouver une URL à partir d'un contenu en PHP?
-
11-09-2019 - |
Question
ont besoin d'un simple preg_match, qui trouvera « c.aspx » (sans les guillemets) dans le contenu si elle trouve, il retournera toute URL. A titre d'exemple
$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212">New message</a><br/>';
maintenant il devrait preg_match « c.aspx » de contenu $ et donnera une sortie comme
"/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212"
Le contenu de $ devrait avoir plus de liens, sauf « c.aspx ». Je ne veux pas. Je ne veux que toutes les URL qui ont "c.aspx".
S'il vous plaît laissez-moi savoir comment je peux le faire.
La solution
Vous utilisez DOM pour analyser HTML, non regex. Vous pouvez utiliser regex pour analyser la valeur d'attribut bien.
Edit:. Par exemple mis à jour il vérifie 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;
}
}
}
}
Autres conseils
Si vous voulez trouver une chaîne entre guillemets avec c.aspx en elle:
/"[^"]*c\.aspx[^"]*"|'[^']*c\.aspx[^']*'/
Mais vraiment, pour analyser plus HTML que vous seriez mieux avec une sorte d'analyseur DOM afin que vous puissiez être sûr de ce que vous correspondant est vraiment un href.