2012-09-20 48 views
0

,它應該掃描鏈接並在數組[索引]中對它們編制索引。但由於某種原因,他們不會索引。此腳本在下面的代碼中找不到Absolute Urls

我開始思考如果我的正則表達式代碼錯了,我該如何改進它。也是我的file_get_contents命令?它使用正確嗎?

$links = Array(); 

$URL = 'http://www.theqlick.com'; // change it for urls to grab 

// grabs the urls from URL 
$file = file_get_contents($URL); 

    $abs_url = preg_match_all("'^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$^'", $file, $link); 
    if (!empty($abs_url)) { 
     $links[] = $abs_url; 
    } 
+0

查看[preg_match_all](http://php.net/manual/en/function.preg-match-all.php)的文檔。第三個參數是結果保存的位置。 – sachleen

回答

0

在您的preg_match_all中,您保存到$ link而不是$ links。

0

preg_match_all返回匹配全模式的數字(可能爲零),或FALSE如果發生錯誤(C)php.net

preg_match_all("'^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$^'", $file, $matches); 

if (!empty($matches) 
    $links = $matches; 
0

您正則表達式是錯誤的。您在與尾匹配$相鄰的模式末尾有一個頭錨^。我不認爲主播真的不需要。此外,您正在存儲的變量的匹配項爲$link(否s)。加上你的模式分隔符似乎是'字符。那是故意的嗎?幸運的是,但我猜你不打算這麼做?

試試這個:

$matchCount = preg_match_all("/(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?/", $file, $matches); 
if ($matchCount) 
{ 
    foreach ($matches as $match) 
    { 
     $links[] = $match[0]; 
    } 
} 

閱讀上PHP regular expressions

相關問題