preg_match从其他站点中选择URL

时间:2010-01-28 05:50:06

标签: php

我想从this site中选择所有目录网址。

我做了pregmatch,但它检索整个网站网址,这也意味着不必要的网址链接。

渲染,这里是my code

如何从该网站获取所有提交链接?

4 个答案:

答案 0 :(得分:0)

你需要一个HTML parser。 HTML是不规则的,因此正则表达式效果不佳。

答案 1 :(得分:0)

我有一个漂亮的小工具,你可以使用。

制作正则表达式键

在gskinner.com上查看RegExr

此外,我相信这是您寻找的模式。对于要匹配的锚,它必须具有包含域的完整URL。我将在数组中输出URL,域和路径。见下文。

  

的preg_match('/ HTTP:??\ / \ /(P [A-Z0-9 /] + \ [\ W] +)(P [?\ / \ \ W \ = \&安培;] +)?)[\ s \ w =“] +> /',$ site,$ anchors);

     

$ url = $ anchors ['url'];
  $ domain = $ anchors ['domain'];
  $ path = $ anchors ['path'];

让我知道它是怎么回事。我没有对此进行测试,所以如果出现错误我会道歉。

答案 2 :(得分:0)

要为此使用正则表达式,您需要一些一致的分隔符。值得庆幸的是,您想要的网址 - 以及您想要的网址 - 在源代码中看起来像这样:

target="_blank">-->the url is here<!--</a>-->

意味着你想要的正则表达式是:

@target="_blank">-->(?P<url>.+?)<!--</a>-->@

来自第一个捕获组的匹配项(在“url”下编入索引)将包含 - surprise - URLs。为什么命名捕获组?当你回顾你的代码时,似乎更容易弄清楚你在做什么。

答案 3 :(得分:0)

我试过运行它,它似乎工作,只改变了正则表达式

<?php
for($i=0;$i<=25;$i++){
    $site_url = "http://www.directorymaximizer.com/index.php?pageNum_directory_list=$i";
    $preg_math =  file_get_contents($site_url);
    $regex = '@-->(https?://[^<]*)<\!--@'; 
    preg_match_all($regex, $preg_math, $matches, PREG_PATTERN_ORDER); 

    foreach($matches as $key=>$val){
    if($val!="" && !is_numeric($val)){
        foreach(array_unique($val) as $key1=>$val1){
            if( $val1!="" && !is_numeric($val1)){

             echo $val1;
             echo "<br />\n";

            }
        }   
    }
}
}