2012-02-25 54 views
0

我試圖驗證一大堆文字,並檢查是否有任何郵件殺死網頁...所以我用下面的代碼:PHP preg_match_all由於未知原因,

if (preg_match_all("/^([a-zA-Z0-9_.-])[email protected]([a-zA-Z0-9_.-])+\\.([a-zA-Z])+([a-zA-Z])+/", $str, $matches)){ 

} 

這會爲TEXT_A工作在第1頁

,但是當我在第二頁去嘗試在TEXT_A再次檢查它會殺死與「問題加載頁面」的錯誤頁面...

如果我刪除此查詢的頁面將加載很好.. 。我不明白爲什麼會發生這種事...

編輯:使用笨

+4

你有錯誤報告嗎? – 2012-02-25 20:37:24

+0

頁停止裝載有錯誤:「連接被重置 而該頁面被加載到服務器連接被重置。」(不是PHP的錯誤,但瀏覽器錯誤) – fxuser 2012-02-25 20:39:08

+0

你有PHP的錯誤報告打開? (使用'的error_reporting()',如果沒有,打開它使用'的error_reporting(E_ALL);') – 2012-02-25 20:40:05

回答

1

IM我看到你的正則表達式的問題,可能導致Catastrophic Backtracking

^([a-zA-Z0-9_.-])[email protected]([a-zA-Z0-9_.-])+\\.([a-zA-Z])+([a-zA-Z])+ 
             ^^^^^^^^^^^^^^^^^^^^^^ 

你要什麼我中標記的區域相匹配?

正則表達式應該如何知道從哪個信在第二組應適用?

如果你有一個比較長的字母順序,那麼正則表達式需要很多步驟來匹配那個==>你有一個性能問題,正則表達式不能及時完成!

我會說你可以刪除最後一組和正則表達式匹配相同,但速度要快得多。

^([a-zA-Z0-9_.-])[email protected]([a-zA-Z0-9_.-])+\\.([a-zA-Z])+