2011-08-07 83 views
1

我需要從一個html文件PHP的HTML解析器性能

<input type="hidden" name="email" id="email" value="email%40hotmail.com"> 

提取隱藏輸入我目前使用http://simplehtmldom.sourceforge.net/,但我想知道是否有與較低的RAM使用任何更快的解決方案。輸入位於文檔中間的某處,因此不需要加載整個html頁面。正則表達式工作會更快嗎? 我將不得不處理數百萬個文檔。要明確我需要只提取電子郵件%40hotmail.com

回答

0

你可以這樣:

$html = '<input type="hidden" name="email" id="email" value="email%40hotmail.com">'; 
preg_match('%<input type="hidden" name="email" id="email" value="([^\"]+)">%', $html, $email); 

編輯

我犯了錯誤,正則表達式是比較快的。

1

如果您只需要與該格式完全匹配,那麼確定使用正則表達式。你不能使用它進行通用的HTML解析,但你可以得到一個簡單的模式。

這將做到這一點:

<input type="hidden" name="email" id="email" value="([^"]*)"> 

通配符匹配任何不是一個雙引號字符。不要忘記解碼html實體。

+0

我期待的只是VALUE而不是整個輸入。如果我打印你給我的模式,我得到[0] =>數組 ( [0] => Michael

+0

@Michael你在你想捕捉的部分周圍加上一些人,我爲你修改了答案。 – Ariel

1

我覺得DomDocumentXPath相當快和良好的內存。另一個好處是,這是使用已定義的標準,因此相當獨立且易於訪問,並且通常是完成任務所需的任何東西,所以可能比加載使用相同的庫更輕量一些。

一個簡單的字符串搜索(查找開始模式,查找結束模式)可能會更快,但如果文檔更改,它不能很好地擴展。然而,這比編譯和運行正則表達式還要快。