使用 preg_replace 处理巨大的 xml 文件 [重复]
Posted
技术标签:
【中文标题】使用 preg_replace 处理巨大的 xml 文件 [重复]【英文标题】:Dealing with huge xml file using preg_replace [duplicate] 【发布时间】:2015-04-19 13:55:49 【问题描述】:我试图在一个巨大的 xml 文件 (1GB) 之间进行“搜索替换”。 我发现这个很棒的代码在我的文件上使用 str_replace 时可以完美运行-
<?php
function replace_file($path, $string, $replace)
set_time_limit(0);
if (is_file($path) === true)
$file = fopen($path, 'r');
$temp = tempnam('./', 'tmp');
if (is_resource($file) === true)
while (feof($file) === false)
file_put_contents($temp, str_replace($string, $replace, fgets($file)), FILE_APPEND);
fclose($file);
unlink($path);
return rename($temp, $path);
replace_file('myfile.xml', '<search>', '<replace>');
到目前为止一切顺利,效果很好。
现在我将 str_replace 更改为 preg_replace 并将搜索值更改为 '/^[^]/' 所以代码看起来像这样-
<?php
function replace_file($path, $string, $replace)
set_time_limit(0);
if (is_file($path) === true)
$file = fopen($path, 'r');
$temp = tempnam('./', 'tmp');
if (is_resource($file) === true)
while (feof($file) === false)
file_put_contents($temp, preg_replace($string, $replace, fgets($file)), FILE_APPEND);
fclose($file);
unlink($path);
return rename($temp, $path);
replace_file('myfile.xml', '/[^<search>](.*)[^</search>]/', '<replace>');
我在第 16 行收到错误“preg_replace unknown modifier”'d' 第 16 行是 -
file_put_contents($temp, preg_replace($string, $replace, fgets($file)), FILE_APPEND);
【问题讨论】:
查看导致此错误的$string
的实际值会很有启发意义。我的猜测是它包含/d
。
好吧,我试试 $string= '/[^[]
在 PCRE 中是一个字符类。使用[^<category>]
,您实际上与[^<>acegorty]
匹配相同。您正在匹配字符(或字节),而不是单词。
PCRE 无论如何都不是最好的解决方案。使用XMLReader 和XMLWriter。
【讨论】:
以上是关于使用 preg_replace 处理巨大的 xml 文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 preg_replace 和 preg_quote 处理字符串(不区分大小写)?