0

href任意の HTML ソースで自分の URL を含むすべてのタグを検索したいと考えています。

私はこのコードを使用しました:

preg_match_all("'<a.*?href=\"(http[s]*://[^>\"]*?)\"[^>]*?>(.*?)</a>'si", $target_source, $matches);

例として、次を含む href タグを見つけようとします。http://www.emrekadan.com

どうすればできますか?

4

1 に答える 1

1

DOMこの目的には、単純に PHP のパーサーを使用します。これは正規表現より難しいように見えるかもしれませんが、実際にははるかに簡単で、HTML を解析する正しい方法です。

$url = 'WEBSITE_TO_SEARCH_FOR';
$searchstring = 'YOUR_SEARCH_STRING';
$dom = new DOMDocument();
@$dom->loadHTMLFile($url);
$result = array();

foreach($dom->getElementsByTagName('a') as $link) {
    $href = $link->getAttribute('href');
    if(stripos($href, $searchstring) !== FALSE) {
        $result[] = $href;
    }
}

if(!empty($result)) print_r($result);

説明:

  • loadHTMLfile()メソッドを使用して指定された URL を読み込みます
  • すべてのタグを検索し<a>、それらをループします
  • stripos()href に指定された検索用語が含まれているかどうかを大文字と小文字を区別せずにチェックするために使用します
  • 存在する場合は、$result配列にプッシュされます

注: ファイル名として空の文字列が渡された場合、または空のファイルが指定された場合、警告が生成されます。私は@そのメッセージを隠していましたが、一般的に悪い習慣と見なされています。追加のチェックを追加して、URL をロードする前にその URL が存在することを確認できます。

于 2013-09-17T22:36:26.903 に答える