2012-02-27 11 views
0

私は、rel = "nofollow"属性を持つウェブページ上のすべてのリンクを見つける正規表現を作成しようとしています。RegExp:ページ上にあるすべてのリンクを見つける/ nofollow

$link = "/<a href=\"([^\"]*)\" rel=\"nofollow\">(.*)<\/a>/iU"; 

は明らかにこれは非常に欠陥がある:私は私に過酷にならないでください正規表現の初心者くさいよ:)

これは私がこれまでに得たものである、断っておきます。他の属性を持つリンクやスタイルの異なるリンク(一重引用符)は一致しません。

+2

[次のようなコードを考えてください。つかいます。正規表現。に。解析する。 HTML。](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454)...ポニー、彼は来る。 – rdlowrey

答えて

3

$doc = new DOMDocument(); 
libxml_use_internal_errors(true); 
$doc->loadHTML($html); // loads your html 
$xpath = new DOMXPath($doc); 
// returns a list of all links with rel=nofollow 
$nlist = $xpath->query("//a[@rel='nofollow']"); 
+1

あなたは私にそれを打つ! – cwallenpoole

+0

ありがとうございます。あなたの例をhttp://htmlparsing.com/php.htmlに追加しました。 –

1

これを試してください:あなたは本当にHTMLの解析のこの種の発生しやすいエラーになります任意の正規表現ベースのソリューションとして、この目的のためにDOM parserを使用する必要があります

$link = "/<(a)[^>]*rel\s*=\s*(['\"])nofollow\\2[^>]*>(.*?)<\/\\1>/i"; 
関連する問題