Preg_match — получение href
-
19-09-2019 - |
Вопрос
Я застрял с вопросом, с которым мне только что помогли - это новая проблема, но незначительная.
У меня есть preg_match, чтобы получить содержимое href.Пожалуйста, не говорите мне не использовать регулярное выражение - я знаю об использовании других парсеров/классов и т. д., но это старый скрипт, который сейчас просто нужно исправить.:) Нет времени на переписывание!
preg_match("~<a target=\'_blank\' rel=\'nofollow\' href=\"(.*?)\">~i", $epilink, $epiurl);
Он возвращает:
http://www.example.com/frame2.php?view=&epi=54673-r
Однако он должен вернуться:
http://www.example.com/frame2.php?view=168204&epi=54673
Это пример HTML, с которым он будет работать:
<a target='_blank' rel='nofollow' href="http://www.example.com/frame2.php?view=545903&epi=54683">
Почему URL-адрес, который я вернул, имеет неверный формат?
Спасибо всем за любую помощь.
Решение
$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;
}
}
выход
$ php test.php
http://www.example.com/frame2.php?view=545903&epi=54683
Другие советы
Это должно работать:
$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 ($ эпиурл);
вы также можете использовать preg_match_all
Не связан с StackOverflow