CSV 到 MYSQL 解析问题
我正在尝试将 .csv 文件解析到 mysql 数据库中,但这并不有趣。
有些行看起来像这样:
"Value", Value, "Value3", ,"Value,Value"
有些行看起来像这样:
Value, Value, , Value, , Value
除了空字段之外,这个 preg_split 效果很好:
foreach ($row as $item) {
$item = preg_split( "/[,]*\\\"([^\\\"]+)\\\"[,]*|[,]+/", $item, 0, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
}
当我删除了“PREG_SPLIT_NO_EMPTY”,我在 $item 末尾添加了一个额外的空值。 有没有一个正则表达式可以解决这个问题?
I am trying to parse a .csv file into a mysql database, and it's not fun.
Some rows look like this:
"Value", Value, "Value3", ,"Value,Value"
And some look like this:
Value, Value, , Value, , Value
This preg_split worked well except for fields that were empty:
foreach ($row as $item) {
$item = preg_split( "/[,]*\\\"([^\\\"]+)\\\"[,]*|[,]+/", $item, 0, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
}
When I removed "PREG_SPLIT_NO_EMPTY", I got an extra, empty value added at the end of $item.
Is there a regex expression that would work for this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
为什么不使用 LOAD DATA INFILE
或者,使用 PHP 内置的在 fgetcsv() 或 str_getcsv() 函数而不是搞乱正则表达式试图重新发明轮子
Why not use LOAD DATA INFILE
Alternatively, use PHP's built in fgetcsv() or str_getcsv() functions rather than messing about with regular expressions trying to reinvent the wheel