由于有些NDAs,我在这里真正披露的信息量很小。不幸的是,没有我在哪里有我的答案,所以我转向Stack Overflow。基本原理如下:在PHP中,我使用HTTP(使用cURL或file_get_contents)从SVN存储库下载大型文件(73000个字符),并搜索规则。所有规则都使用@rule注释,因此找到它们的正则表达式应该是
/(?<=@RULE).+?$/im
我测试了它,它的确有效。问题是,即使文件正确下载并转换为字符串(var_dumps已确保这一点)
preg_match('/RU/',$file, $rules);
尽管我可以在var_dumped字符串中查找相应的匹配项,但将$ rules完全清空。我正在努力想弄清楚发生了什么。没有错误被抛出(它返回0),它似乎没有耗尽内存,它只是告诉我“不,没有,乔治。”有趣的是,它会找到
/R/
好的。那里有什么想法吗?
答案 0 :(得分:3)
由于您只匹配ASCII,我唯一能想到的是文本格式为UTF-16,在ASCII的情况下,在每个字符后添加'\0'
。 / p>
如果是这种情况,那么在运行preg_match()
之前,请运行此命令:
$file = mb_convert_encoding($file, 'UTF-8', 'UTF-16');