Php Regex将文本月份更改为数字

Php Regex将文本月份更改为数字,php,mysql,regex,csv,import,Php,Mysql,Regex,Csv,Import,我有一个巨大的CSV文件(10万条记录),格式如下 147804,AC,34,15AUG09,09:00,15AUG09,21:00,YYZ,YVR,PLS 147816,AC,34,26AUG09,09:00,01SEP09,21:00,YYZ,YVR,PLS 我需要将它们导入mysql数据库。如何将所有月份更改为数字月份,最好更改为yyyy/mm/dd格式。 谢谢令人惊讶的是,这似乎起到了作用: echo date('Y/m/d', strtotime('15AUG09')); 返回:2

我有一个巨大的CSV文件(10万条记录),格式如下

147804,AC,34,15AUG09,09:00,15AUG09,21:00,YYZ,YVR,PLS
147816,AC,34,26AUG09,09:00,01SEP09,21:00,YYZ,YVR,PLS
我需要将它们导入mysql数据库。如何将所有月份更改为数字月份,最好更改为yyyy/mm/dd格式。
谢谢

令人惊讶的是,这似乎起到了作用:

echo date('Y/m/d', strtotime('15AUG09'));
返回:2009/08/15


如果你能设法解析你的CSV,你将以你想要的格式获得你的日期。

令人惊讶的是,这似乎可以做到:

echo date('Y/m/d', strtotime('15AUG09'));
返回:2009/08/15


如果你能设法解析你的CSV,你将以你想要的格式获得你的日期。

这很难用正则表达式完成,而且很容易出错。PHP内置了CSV支持,而且更安全

<?php
if (($if = fopen("src_file.csv", "r")) !== FALSE) {
    if (($of = fopen("dst_file.csv", "w")) !== FALSE) {
        while (($cols = fgetcsv($if)) !== FALSE) {
            $cols[3] = date('Y/m/d',strtotime($cols[3]));
            $cols[5] = date('Y/m/d',strtotime($cols[5]));
            fputcsv($of, $cols);
        }
        fclose($of);
    }
    fclose($if);
}
?>


我不知道只在数据库中存储
$cols
或者创建一个新文件并导入它是否更有效。我没有任何基准测试。

使用正则表达式很难实现这一点,而且很容易出错。PHP内置了CSV支持,而且更安全

<?php
if (($if = fopen("src_file.csv", "r")) !== FALSE) {
    if (($of = fopen("dst_file.csv", "w")) !== FALSE) {
        while (($cols = fgetcsv($if)) !== FALSE) {
            $cols[3] = date('Y/m/d',strtotime($cols[3]));
            $cols[5] = date('Y/m/d',strtotime($cols[5]));
            fputcsv($of, $cols);
        }
        fclose($of);
    }
    fclose($if);
}
?>


我不知道只在数据库中存储
$cols
或者创建一个新文件并导入它是否更有效。我没有任何基准。

这可以在没有正则表达式的情况下完成,可能更干净-只需使用PHP的CSV解析函数解析它,分割日期,写回值,就可以了。您是否已经确定正则表达式是最适合您的问题的解决策略?这可以在没有正则表达式的情况下完成,可能更干净-只需使用PHP的CSV解析函数解析它,分割日期,写回值,您是否已经确定正则表达式是最适合您的问题的解决方案策略?非常好,非常感谢。我原以为这样会耗尽内存,但fgetcsv似乎一次只做一点。15分钟内转换了1500万张唱片:)太好了,非常感谢。我原以为这样会耗尽内存,但fgetcsv似乎一次只做一点。15分钟内转换1500万条记录:)