Preg_match - recuperar href
-
19-09-2019 - |
Pergunta
Eu tenho preso com uma pergunta que eu apenas ter sido ajudado por diante -. É um problema novo, mas apenas ligeiramente
Eu tenho essa preg_match para obter o conteúdo de href. Por favor, não me diga que não usar regex - Estou ciente de usar outros parsers / classes etc, mas este é um script antigo que precisa apenas de ser fixado por agora. :) Não há tempo para re-escreve!
preg_match("~<a target=\'_blank\' rel=\'nofollow\' href=\"(.*?)\">~i", $epilink, $epiurl);
Ele retorna:
http://www.example.com/frame2.php?view=&epi=54673-r
No entanto, ele deve retornar:
http://www.example.com/frame2.php?view=168204&epi=54673
Este é um exemplo de html que ele iria trabalhar com:
<a target='_blank' rel='nofollow' href="http://www.example.com/frame2.php?view=545903&epi=54683">
Por que o URL eu voltei malformada?
Graças todos por qualquer ajuda.
Solução
$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;
}
}
saída
$ php test.php
http://www.example.com/frame2.php?view=545903&epi=54683
Outras dicas
Isso deve funcionar:
$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);
Você também pode usar preg_match_all
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow