2014-08-30 44 views
0

我無法使用preg_match_all來獲取具有類和屬性的跨度。preg_match_all接受字符串的問題

這就是我想獲取/捕獲:

<span class="class-name" data-is-compact="false">Content</span> 

這是我想出:

$response = file_get_contents('https://twitter.com/' . $this->twitter_sreenname . '/');  
preg_match_all('#<span class=\"class-name\" data-is-compact=\"false\">(.+?)\<\/span\>#', $response, $matches); 

但我將無法正常工作。 如果我刪除:

data-is-compact=\"false\" 

它的工作原理。我究竟做錯了什麼?

+0

嘗試包括您嘗試匹配的實際字符串,以便我們可以看到發生了什麼。 – 2014-08-30 22:42:46

+0

對不起,我犯了一個打字錯誤,我的意思是跨度而不是div。 字符串是跨度。 我對此仍然很陌生,所以我可能會使用錯誤的表達式 - 但它是preg_match_all不會讀取/接受的範圍 – 2014-08-30 22:46:12

+0

我的意思是'$ response'的實際值。沒有這些,就沒有辦法告訴出了什麼問題。 – 2014-08-30 22:51:37

回答

3

你不使用這個好工具。使用DOM:

$dom = new DOMDocument(); 
@$dom->loadHTMLFile('https://twitter.com/' . $this->twitter_sreenname . '/'); 
$xpath = new DOMXPath($dom); 
$query = '//span[@class="class-name" and @data-is-compact="false"]/text()'; 
$nodes = $xpath->query($query); 

foreach($nodes as $node) { 
    echo $node->nodeValue . "\n"; 
} 
+0

+1祝賀比第一個人更快地建議正則表達式。 – 2014-08-30 22:53:39