如何通过PHP从内容中查找URL?

Aaj*_*hid 1 php regex dom preg-match

需要一个简单的preg_match,它会在内容中找到"c.aspx"(没有引号),如果找到,它将返回整个url.举个例子

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

现在它应该从$ content preg_match"c.aspx"并将输出为

"/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&amp;n=783622212"
Run Code Online (Sandbox Code Playgroud)

除了"c.aspx"之外,$ content应该有更多的链接.我不想要他们.我只想要所有有"c.aspx"的网址.

请让我知道如何做到这一点.

med*_*iev 7

您使用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;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 还有一个PHP函数,`parse_url()`,您可以在从href属性中提取URL后使用它 (2认同)