正则表达式从mysql插入语句中删除空格

时间:2012-05-24 16:51:15

标签: php mysql regex csv

我使用fgetcsv()从CSV文件导入数据,这会为每行生成一个数组。然后我implode()这个数组并使用mysql_real_escape_string()来创建一个用于mysql查询的字符串。最终看起来像这样:

\"2342352353\",\" \",\"\"

我正在阅读的一些CSV文件最多有200多列(一丝不苟,但确实如此),因此插入语句变得非常长。为了使它们不那么冗长,我想删除insert语句中的任何空格或空格。所以,上面的陈述应该变成:

\"2342352353\",,

所以我正在研究解决这个问题的两种方法。首先,我可以遍历数组,并使用trim()查找包含空格的任何条目并将其设为空白。然后我可以在结果字符串上执行str_replace(),如下所示:

for ($x=0; $x<sizeof($data); $x++) {
    $data[$x] = trim($data[$x]) == ''  ?  ''  :  $data[$x];
}
$insert_string = '\\"' . mysql_real_escape_string(implode('","', $data)) . '\\"';
str_replace('\"\"', '', $insert_string);

第二种方法是跳过遍历数组并仅使用正则表达式删除\" \"的任何出现,但在分隔引号的中间可能有任意数量的空格。

我的问题首先是如何使用正则表达式执行此操作?其次,哪种方式会更快?

一旦我得到正则表达式的答案,我会做一些基准测试,并会更新结果。

谢谢!

1 个答案:

答案 0 :(得分:0)

这个正则表达式怎么样?

\\"\s*\\"

在上面的代码中使用:

preg_replace('/\\\"\s*\\\"/', '', $insert_string);

\s*匹配任意数量的空白字符。

如果正则表达式慢于迭代你的CSV文件,我就会吃我的帽子......