我正在处理几GB的文本,并且我的脚本死于preg_replace()。经过一些研究后,我提取出现问题的部分文本。PHP:preg_replace吃掉所有内存
preg_replace('/\b\p{L}{0,2}\b/u', '', "\x65\xe2\xba\xb7\x69\xe3\xb1\xae");
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 251105872 bytes)
我想删除短(最多2个字符)的话。此外,我发现,如果我将正则表达式更改为:
preg_replace('/\b\p{L}{1,2}\b/u', '', "\x65\xe2\xba\xb7\x69\xe3\xb1\xae");
它工作正常。
有人可以解释发生了什么事吗?第一个例子适用于99%的文本。
你是否将整个“情侣文本”同时传递给函数?这意味着你首先将整个文件读入内存? – jedwards
^^分块处理 – 2013-09-23 04:43:39
没有。我得到了文本文件,每个文件大约100 kb – 2ge