Как найти URL-адрес из контента с помощью PHP?
-
11-09-2019 - |
Вопрос
нужен простой preg_match, который найдет "c.aspx" (без кавычек) в содержимом, если он найдет, он вернет весь URL.В качестве примера
$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212">New message</a><br/>';
теперь он должен предварительно сопоставить "c.aspx" с $content и выдаст вывод в виде
"/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212"
В $content должно быть больше ссылок, кроме "c.aspx".Они мне не нужны.Мне нужны только все URL-адреса с надписью "c.aspx".
Пожалуйста, дайте мне знать, как я могу это сделать.
Решение
Вы используете DOM для синтаксического анализа HTML, а не регулярных выражений.Однако вы можете использовать регулярное выражение для анализа значения атрибута.
Редактировать:обновленный пример, чтобы он проверял наличие 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;
}
}
}
}
Другие советы
Если вы хотите найти любую заключенную в кавычки строку с c.aspx в ней:
/"[^"]*c\.aspx[^"]*"|'[^']*c\.aspx[^']*'/
Но на самом деле, для синтаксического анализа большинства HTML вам было бы лучше использовать какой-нибудь DOM-анализатор, чтобы вы могли быть уверены, что то, что вы сопоставляете, действительно является href.