2011-07-04 22 views
0

我無法在PHP中使用正則表達式工作。它應該得到網頁上的標籤之間的字符串,但我所得到的回報是當我試圖回顯它時,數組字。無法使正則表達式在PHP中工作。只輸出單詞陣列

這是我正在使用正則表達式的文本。它是以字符串形式下載的網頁的一部分。

<title> 
HTC Desire S 
</title> 

這是我用於正則表達式的代碼。

while(!feof($list_of_phones)) 
{ 
     $phone = fgets($list_of_phones); 
     $info = file_get_contents($phone); 
     preg_match_all("/\/<title>(.*)<\/title>/", $info, $title, PREG_OFFSET_CAPTURE); 
     echo $title[0]; 
} 
+0

試試'preg_match'而不是'preg_match_all'。 – hakre

+0

它看起來像你試圖用正則表達式解析HTML。看到這個問題,爲什麼這是一個壞主意:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

+2

你知道有easyer方式獲得通過使用類似[DOMDocument](http://lv.php.net/manual/en/class.domdocument.php)的html/xml文檔的內容? –

回答

2

請仔細閱讀manual page。第三個參數填充了多維數組。你可以使用var_dump()來檢查你的變量。

1

pre_match_all()

$matches總是multdimensional陣列(通常爲2級)。當您設置PREG_OFFSET_CAPTURE-標誌時,結果也更深一層。

PREG_OFFSET_CAPTURE 如果該標誌,對每個出現的匹配結果附屬的字符串偏移也將被退回。注意這改變匹配的值到一個數組,每一個元素是一個數組由匹配字符串中的偏移量爲0和它的字符串偏移量在受試者偏移1.

echo $title[0][0][0]; 

爲了進一步調試:不要使用代替使用echo,使用var_dump()print_r()。這會給你更多信息,比echo

然後你使用這個表達式

/\/<title>(.*)<\/title>/ 

據我所看到的,這也需要一個/(由\/指定)<title>之前。我不認爲,這是,你想要的。 (當我們選擇不同的分隔符這裏,它的更明顯:~/<title>(.*)</title>~

0

第一個問題:你的正則表達式似乎有它的一個額外的斜線:

/\/<title>(.*)<\/title>/ 
^^ 

不知道爲什麼你有,有,但我想應該是這樣的:

/<title>(.*)<\/title>/ 

問題二:即使你是對的,$title[0]仍然將是一個數組;您需要$title[0][0]以獲取完整的<title>content</title>字符串和$title[1][0]以獲取<title>標記中的文本。

希望有所幫助。

0

首先,您的正則表達式似乎存在錯誤 - 即最初的\/

其次,$title[0]將不包含您正在尋找。應用print_r(或類似)$title,您會看到哪些部分是相關的。

相關問題