Я предпочел бы XPath, который предназначен для разбора XML/XHTML:
$DOM = new DOMDocument();
@$DOM->loadHTML($html); // use the @ to suppress warnings from invalid HTML
$XPath = new DOMXPath($DOM);
$links = array();
$link_nodes = $XPath->query('//a[contains(@href, ".mp3")]');
foreach($link_nodes as $link_node) {
$source = $link_nodes->getAttribute('href');
// do some extra work to make sure .mp3 is at the end of the string
$links[] = $source;
}
Существует ends-with()
функция XPath, что вы можете заменить , если вы используете XPath 2.0. В противном случае вы можете добавить дополнительное условие, чтобы убедиться, что .mp3
находится в конце строки. Однако это может и не понадобиться.
Вы еще что-нибудь пробовали? – Pinoniq
Используйте DOM и следующий xpath: '// a [end-with (@href," .mp3 ")]' - было бы намного проще, я полагаю :-) – zerkms
@zerkms XPath, 'end-with' звучит много лучше, чем мой ответ! Не читал ваш комментарий до – hek2mgl