Preg_match: recupero di href
-
19-09-2019 - |
Domanda
Sono rimasto bloccato con una domanda per la quale ho appena ricevuto aiuto: è un problema nuovo ma solo leggermente.
Ho questo preg_match per ottenere il contenuto di href.Per favore, non dirmi di non usare regex: sono a conoscenza dell'uso di altri parser/classi ecc., ma questo è un vecchio script che per ora deve solo essere corretto.:) Non c'è tempo per le riscritture!
preg_match("~<a target=\'_blank\' rel=\'nofollow\' href=\"(.*?)\">~i", $epilink, $epiurl);
Restituisce:
http://www.example.com/frame2.php?view=&epi=54673-r
Tuttavia, dovrebbe restituire:
http://www.example.com/frame2.php?view=168204&epi=54673
Questo è un esempio di HTML con cui funzionerebbe:
<a target='_blank' rel='nofollow' href="http://www.example.com/frame2.php?view=545903&epi=54683">
Perché l'URL che ho restituito non è corretto?
Grazie a tutti per l'eventuale aiuto.
Soluzione
$string="<a target='_blank' rel='nofollow' href=\"http://www.example.com/frame2.php?view=545903&epi=54683\">";
$s = explode('">',$string);
foreach($s as $k){
if (strpos($k,"href")!==FALSE){
echo preg_replace('/.*href="|/ms',"",$k);
break;
}
}
produzione
$ php test.php
http://www.example.com/frame2.php?view=545903&epi=54683
Altri suggerimenti
Questo dovrebbe funzionare:
$epilink = "<a target='_blank' rel='nofollow' href=\"http://www.example.com/frame2.php?view=545903&epi=54683\">";
preg_match("/<a target='_blank' rel='nofollow' href=\"(.*?)\">/i", $epilink, $epiurl);
print_r($epiurl);
è possibile utilizzare anche preg_match_all
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow