我正在try 弄清楚正则表达式,并使用PHP修复CSV文件.CSV文件的格式应如下所示:
id, text field1, text field2
1,some text,another text
2,some text,another text
3,some text,another text
问题是,有时"Text field1"中有一个新的行字符,CSV文件的内容如下:
id, text field1, text field2
1,some text,another text
2,some
text,another text
3,some text,another text
因此,当逐行读取文件或使用新行分解以逐行填充数组时,我会得到无效记录.我使用以下代码修复了上面的问题:
<?php
$c= file_get_contents($myFile);
$c= preg_replace( '/\n([^0-9])/is', "\n~~$1", $c );
$c= str_replace( "\n~~", " ", $c );
?>
上面的正则表达式判断换行符后面的字符是否不是数字,然后在那里添加一个~~
号,我用空格替换换行符和~~
号.
问题是,有时"文本字段1"中有数字,换行符就出现在它们的前面,如下所示:
id, text field1, text field2
1,some text,another text
2,some
1999-06-21 text,another text
3,some text,another text
在这种情况下,我的正则表达式没有放置~~
号,并且我得到了一个损坏的CSV文件.
我如何修改上面的正则表达式来解决这个问题?我希望有一个正则表达式,它可以判断"后跟逗号的非数值(任何长度)".请注意,我在csv文件中有超过100000条记录,所以如果使用正则表达式方法,那么正则表达式必须判断任何长度的非数字值.
大概是这样的:
$c= preg_replace( '/\n([^0-9]*\,)/is', "\n~~$1", $c);
但上面的正则表达式不起作用,我不知道有多少正则表达式才能使其起作用.
如果有任何其他方法来修复这个CSV文件,即使这样也是可以的.它不一定是正则表达式解决方案.
谢谢