2011-07-14 11 views
1

私は一部のウェブサイトを読むために(PHP)file_get_contentsを使用しています。これらのサイトにはFacebookのリンクが1つしかありません...サイト全体を取得した後、Regexを使用してURLコンテンツ全体を抽出してください

ので、いくつかの部分に存在します:私はhttp://facebook.com/usernameを取得したい

<a href="http://facebook.com/username" > 

、私は "()最後に()" 最初から意味。ユーザー名は変数です... username.somethingelseかもしれませんし、 "href"の前後にいくつかの属性を持つことができます。私は非常に明確にされていないのです

念のために:

<a href="http://facebook.com/username" > //I want http://facebook.com/username 
<a href="http://www.facebook.com/username" > //I want http://www.facebook.com/username 
<a class="value" href="http://facebook.com/username. some" attr="value" > //I want http://facebook.com/username. some 

以上のすべての例で、シングルとなる可能性があり、すべての

答えて

3

<a href='http://facebook.com/username' > //I want http://facebook.com/username 

おかげで正規表現を使用しないでください引用HTMLである時点で足を吹き飛ばすショットガンです。代わりに、DOMを使用してください:

$dom = new DOMDocument; 
$dom->loadHTML(...); 
$xp = new DOMXPath($dom); 

$a_tags = $xp->query("//a"); 
foreach($a_tags as $a) { 
    echo $a->getAttribute('href'); 
} 
+0

私はあなたがOPの読み取りのための正規表現を使用してはならない理由を説明する良いリソースを提供したかったです。しかし私は思っていたものを見つけることができませんでした。あなたが良い資源を持っているなら、Marc? – rzetterberg

+1

これはhtml + regexがこのサイトに登場するときの標準的な答えです:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

+0

まあ真実私は、私はFacebookのリンクがあることを知っている文書の一部を得るためにDOMを使用しているが、その部分で私は1から6のリンクをbewtween得るだろう、どのように私はFacebookを持っているものだけを取得する –

1

私はむしろ、正規表現を使用するよりも非常に目的のために、このDOMDocumentを使用してお勧めします。ここにあなたのケースのための迅速なコードサンプルです:

$dom = new DOMDocument(); 
$dom->loadHTML($content); 

// To hold all your links... 
$links = array(); 

$hrefTags = $dom->getElementsByTagName("a"); 
    foreach ($hrefTags as $hrefTag) 
     $links[] = $hrefTag->getAttribute("href"); 

print_r($links); // dump all links 
関連する問題