2012-01-25 85 views
0

我正在使用以下preg_match來獲取網頁的[title]標記。preg_match中的preg_match

// get <title> 
$search = "/\<title\>(.*)\<\/title>/i"; 
preg_match($search, $url_contents, $result); 
$title = $result[1]; 

現在我想的是[標題]標籤內的搜索,所以我寫了這個:

// search for $keyword 
$keyword_slash = "/". $keyword ."/"; 
preg_match_all($keyword_slash, $title, $result); 
print_r($result); // just for testing 

我添加$ keyword_slash因爲否則它給了我一個錯誤。然而,這不起作用。它總是返回一個空數組,即使我知道$關鍵字在[title]中。

+1

是什麼在'$ keyword'?做一個'echo $ keyword_slash;'並更新你的問題。 –

+3

如果包含任何元字符,您可能還需要[preg_quote()](http://php.net/preg_quote)'$ keyword'。另外,將大小寫不敏感的'i'修飾符添加到該正則表達式中,這樣,對於關鍵字而言情況無關緊要。 – drew010

回答

3

你的正則表達式第一個preg_match似乎不正確。它應該是:

$search = "~<title>([^<]*)</title>~i"; 

但是我必須提醒你,使用正則表達式這樣提取的標題是非常容易出錯,你應該考慮使用DOM解析器來獲取。

更新:這裏是建議DOM解析出一個網頁的標題:

$dom = new DOMDocument(); 
libxml_use_internal_errors(true); 
$dom->loadHTML($content); 
$xpath = new DOMXPath($dom); 
$title = $xpath->query("//head/title")->item(0)->nodeValue; 
printf("title=[%s]\n", $title); 
+0

用'[^ ​​<]'替換'。*?'。它效率更高。 –

+0

第一個作品,但我會認爲你的作品更有效(後來我會google的!)。但是,更新它仍然會給出一個空白數組。 Array([0] => Array()) – Linkjuice57

+0

謝謝@JosephSilber更新了正則表達式。 – anubhava