【发布时间】:2012-02-12 18:48:18
【问题描述】:
我因为无法弄清楚这一点而感到非常愚蠢,但我就是无法弄清楚。我需要用模式替换正则表达式字符串,我找到了两个这样做的例子,但老实说,它们让我比以往任何时候都更加困惑。
这是我目前的尝试:
$string = '26 14:46:54",,"2011-08-26 14:47:02",8,0,"BUSY","DOCUMENTATION","1314370014.18","","","61399130249","7466455647","from-internal","""Oh Snap"" <61399130249>","SIP/1037-00000014","SIP/CL-00000015","Dial","SIP/CL/61436523277,45","2011-08-26 14:47:06","2011-08-26 14:47:15","2011-08-26 ';
$pattern = '["SIP/CL/\d*?,\d*?",]';
$replacement = '"SIP/CL/\1|\2",';
$string = preg_replace($pattern, $replacement, $string);
print($string);
但这只是将\1 和\2 替换为空白。所以很明显我没有理解整个概念。
我最后想要的是改变:
this: "SIP/CL/61436523277,45"
to: "SIP/CL/61436523277|45"
格式不佳的 CSV 中的逗号会影响我的其他一些脚本。
【问题讨论】:
-
它的格式似乎不是很差,因为它在引号之间...您确实为此使用了
fgetcsv,不是吗?或者str_getcsv如果它是一个字符串。 -
我不是,但我现在是。无论如何,我需要学习这种形式的正则表达式替换。所以用一块石头杀死了两只鸟:)。我知道 fgetcsv,但它不适合我的目的(它是 1.8GB+ csv....,无法将其全部加载到内存中),但 str_getcsv 运行良好! :)
-
好的,供将来参考:
fgetcsv也不会将整个文件读入内存,只是逐行读取;)