Как найти URL из контента по PHP? - PullRequest
1 голос
/ 20 сентября 2009

нужен просто preg_match, который найдет «c.aspx» (без кавычек) в содержимом, если найдет, он вернет весь URL.В качестве примера

$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&amp;n=783622212">New message</a><br/>';

теперь он должен preg_match "c.aspx" из $ content и будет выводить как

"/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&amp;n=783622212"

У содержимого $ должно быть больше ссылок, кроме "c.ASPX».Я не хочу их.Я хочу, чтобы все URL имели "c.aspx".

Пожалуйста, дайте мне знать, как я могу это сделать.

Ответы [ 2 ]

7 голосов
/ 20 сентября 2009

Вы используете DOM для анализа HTML, а не для регулярных выражений. Вы можете использовать регулярные выражения для анализа значения атрибута.

Редактировать: обновленный пример, поэтому он проверяет c.aspx.

$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&amp;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;
            }
        }
    }
}
1 голос
/ 20 сентября 2009

Если вы хотите найти любую строку в кавычках с c.aspx в ней:

/"[^"]*c\.aspx[^"]*"|'[^']*c\.aspx[^']*'/

Но на самом деле, для синтаксического анализа большей части HTML вам лучше использовать какой-нибудь DOM-парсер, чтобы вы могли быть уверены, что то, что вы соответствуете, действительно href.

...