【问题标题】:Grab all links from a page抓取页面中的所有链接
【发布时间】:2014-01-10 19:36:54
【问题描述】:

我想从页面中获取所有链接(href)。

这是我的实际代码:

preg_match_all('/href=.([^"\' ]+)/i', $content, $anchor);

但这仅抓取域和子域(如 name.name.ex 或 name.ex),但不抓取自定义 URL,如 name.ex/name/name.php。

谁能帮忙解决正则表达式?

【问题讨论】:

标签: php regex url preg-match-all


【解决方案1】:

试试这个正则表达式:

$pattern = "/href="([^\s"]+)/";
preg_match_all($pattern, $content, $matches);

if (count($matches[1]) {
  foreach($matches[1] as $match)
    echo $match . "<br />";
}

【讨论】:

    【解决方案2】:

    给你!

    $string = "<a href='test.php/url' class=>test</a>testar <a href='test2.php/url2' class=>test</a>";
    $pattern = "/<a(?:[^>]*)href=([^ ]*)(?:[^>]*)>/";
    
    preg_match_all($pattern, $string, $matches);
    
    foreach($matches[1] as $match){
        echo $match;
    }
    

    【讨论】:

      【解决方案3】:

      我建议不要为此使用正则表达式。我建议你使用DOM 来解析并得到你的结果。

      以下是使用DOM 和XPath 的示例

      $html = '<a href="name.ex/name/name.php">text</a>
               <a href="foo.com">foobar</a>';
      
      $doc = new DOMDocument();
      $doc->loadHTML($html); 
      
      $xpath = new DOMXPath($doc);
      
      foreach ($xpath->query('//a') as $link) {
         $links[] = $link->getAttribute('href');
      }
      
      print_r($links);
      

      见Working demo

      【讨论】:

        【解决方案4】:

        使用DOMDocument更方便:

        $doc = new DOMDocument();
        @$doc->loadHTML($html);
        
        $linkNodes = $doc->getElementsByTagName('a');
        
        foreach($linkNodes as $linkNode) {
            $urls[] = $linkNode->getAttribute('href');
        }
        
        print_r($urls);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-25
          • 1970-01-01
          • 1970-01-01
          • 2020-04-27
          • 1970-01-01
          相关资源
          最近更新 更多