0

したがって、次のようなスクリプトを使用して、文字列からすべての URL を取得しようとしています。

$file = file_get_contents('something.txt');

function getUrls($string) {
    preg_match_all('~href=("|\')(.*?)\1~', $string, $out);
    print_r($out);
}

getUrls($file);

このドキュメントに含まれる URL は不完全な場合があります (例: "/blah/blah.asp?2")。問題は、このスクリプトを実行すると、次のような配列が得られることです。

Array
(
    [0] => Array
        (
            [0] => href="#A"
            [1] => href="#B"
            [2] => href="#C"
        )

    [1] => Array
        (
            [0] => "
            [1] => "
            [2] => "
        )

    [2] => Array
        (
            [0] => #A
            [1] => #B
            [2] => #C

        )

)

ここで何が起こっているのでしょうか?目的の URL ではなく、ハッシュ記号を含むアルファベット順のリストが返される理由がわかりません。URLを返すだけでどうすればよいですか?

4

1 に答える 1

8

悪の道:

$file = file_get_contents('something.txt');    

function displayUrls($string) {
    $pattern = '~\bhref\s*+=\s*+["\']?+\K(?!#)[^\s"\'>]++~';
    preg_match_all($pattern, $string, $out);
    print_r($out[0]);
}

displayUrls($file);

良い方法:

$doc = new DOMDocument();
@$doc->loadHTMLFile('something.txt');
$links = $doc->getElementsByTagName('a');
foreach($links as $link) {
    $href = $link->getAttribute('href');
    if ($href[0] != '#') $result[] = $href;
}
print_r($result);
于 2013-06-28T00:01:21.337 に答える