2012-08-10 61 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');