2012-08-10 24 views
3

由於一些NDA,我真正能夠在這裏披露的信息量很小。不幸的是,我沒有人對我有一個答案,所以我轉向堆棧溢出。基礎是這樣的:在PHP中,我使用HTTP(使用cURL或file_get_contents)從SVN存儲庫下載大型文件(73000個字符),並搜索規則。所有的規則都標註有@rule,所以正則表達式找到他們應該是preg_match無法找到簡單的正則表達式

/(?<[email protected]).+?$/im 

我測試過它,它的工作原理。問題是,即使文件被正確下載並轉換爲一個字符串(var_dumps,保證了本)

preg_match('/RU/',$file, $rules); 

離開$規則完全是空的,儘管我可以在var_dumped串看到相應的匹配。我在智慧的最後想要弄清楚發生了什麼。沒有錯誤被拋出(它返回0),它似乎沒有用完內存,它只是告訴我「不,沒有任何內容,喬治。」有趣的是,它會發現

/R/ 

就好。那裏有任何想法?

+2

是大小寫敏感的一個問題?規則vs規則vs規則?嘗試'preg_match('/ RU/i',$ file,$ rules);'? – drew010 2012-08-10 01:37:31

+0

用一些可以顯示字符代碼的編輯器來檢查,在文本中'U'與你在正則表達式中指定的'U'相同 – zerkms 2012-08-10 01:45:19

+0

如果你嘗試stristr(),結果如何?只是爲了確認它是preg_match而不是別的...... – HappyTimeGopher 2012-08-10 01:47:36

回答

3

由於您只匹配ASCII,我唯一能想到的就是文本格式是UTF-16,在ASCII的情況下,每個字符後面都加上一個'\0'

如果是這樣的話,運行preg_match()在運行此:

$file = mb_convert_encoding($file, 'UTF-8', 'UTF-16');