3

由于有一些保密协议,我可以在这里真正披露的信息量很少。不幸的是,我所在的地方没有人能回答我,所以我转向 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/

正好。有什么想法吗?

4

1 回答 1

3

由于您只匹配 ASCII,我唯一能想到的是文本格式是 UTF-16,在 ASCII 的情况下,'\0'在每个字符后添加一个。

如果是这种情况,请在运行之前运行preg_match()

$file = mb_convert_encoding($file, 'UTF-8', 'UTF-16');
于 2012-08-10T01:57:00.757 回答