0

以下のコードでは、リンクをスキャンし、配列 [links] でそれらにインデックスを付けることになっています。しかし、何らかの理由で、それらはインデックスに登録されません。

正規表現コードが間違っているかどうかを考え始めています。どうすれば改善できますか。それは私の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;
    }
4

3 に答える 3

0

あなたの正規表現は間違っています。^パターンの最後にテールマッチに隣接するヘッドアンカーがあり$ます。アンカーは本当に必要ないと思います。さらに、保存している変数は$link(no 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の正規表現を読んでください。

于 2012-09-20T17:22:44.273 に答える
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;
于 2012-09-20T17:19:47.103 に答える
0

preg_match_all では、$links ではなく $link に保存しています。

于 2012-09-20T17:16:37.230 に答える