0

我希望我的 PHP 程序从 html 文件中提取所有 URL。当我编写一个 C# 程序来提取 html 文件中的所有 URL 时,我使用了以下正则表达式。然后将“http”部分添加到开头以获得完整的 URL 列表。你能告诉我如何使用我在以下代码中使用的正则表达式来处理 PHP 吗?

        List<string> links = new List<string>();
        Regex regEx;
        Match matches;

        regEx = new Regex("href=\"http\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))\"", RegexOptions.IgnoreCase | RegexOptions.Compiled);
        for (matches = regEx.Match(downloadString); matches.Success; matches = matches.NextMatch())
        {
            links.Add("http" + matches.Groups[1].ToString());
        } //Add all the URLs to a list and return the list

        return links;

如果您能举个例子给我看,我将不胜感激:


@julian 非常感谢您的详细解释。我稍微修改了代码并按以下方式使用它:

$html = file_get_contents('http://mysmallwebpage.com/');
$dom = new DOMDocument;
$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');

foreach ($links as $link)
{      
    $returnLink =  $link->getAttribute('href');
echo "<br />",$returnLink;
}

但结果没有显示确切的 URL 地址。它输出如下内容:

/nmsd-gallery/
/home/?currentPage=3
javascript:noop();

你能告诉我是否有办法只获取 URL 地址吗?如: http://mysmallwebpage.com/

4

2 回答 2

1

尝试使用 DOM 框架提取 URL

    $html = file_get_contents($aktPage);
    $dom = new DOMDocument;
    $dom->loadHTML($html);
    $links = $dom->getElementsByTagName('a');

    foreach ($links as $link)
    {      
            $returnLinks[] =  $link->getAttribute('href');
    }
于 2013-03-28T13:15:18.583 回答
1

嗯,这是页面的内部链接..在这种情况下,您必须过滤 js 链接(或其他不需要的文件,如图像等)并添加 HTTP_REFERER 作为前缀

...

foreach ($links as $link)
{      
    $returnLink =  $link->getAttribute('href');
    if (stripos($returnLink,"javascript")!=false) // or other unwanted calls
    {
        if (stripos($returnLink,"http://") ==false)
        {
            $retunLink = $_SERVER['HTTP_REFERER'].$returnLink
        }
    } 
echo "<br />++",$returnLink;
}

还有更多的案例要检查..但我认为这给了你一个例子......

于 2013-03-28T13:56:36.557 回答