PHP正则提取含特定字符的单词:从CSV字符串中提取日期时间
提取CSV字符串中的日期和时间(PHP正则实现)
嘿,我明白你现在在Laravel项目里要处理这个CSV字符串的需求了,用PHP正则来提取日期和时间完全可行,我给你整理了两种实用的方案,你可以根据自己的场景选:
方案一:分别提取日期和时间
这种方式逻辑清晰,适合需要单独处理日期或时间的场景:
$csvString = '000001 0001 000000000000001975 00 02 0 000 2017/12/13 14:13:27'; // 匹配格式为 年/月/日 的日期(含斜杠) preg_match('/\d{4}\/\d{2}\/\d{2}/', $csvString, $dateMatch); $extractedDate = $dateMatch[0] ?? null; // 匹配格式为 时:分:秒 的时间(含冒号) preg_match('/\d{2}:\d{2}:\d{2}/', $csvString, $timeMatch); $extractedTime = $timeMatch[0] ?? null; // 组合成目标数组 $result = [ 'date' => $extractedDate, 'time' => $extractedTime ]; print_r($result);
正则说明
\d{4}\/\d{2}\/\d{2}:精准匹配XXXX/XX/XX格式的日期,\d{4}匹配4位年份,\/转义斜杠(因为斜杠是正则的分隔符),\d{2}匹配2位月份和日期。\d{2}:\d{2}:\d{2}:精准匹配XX:XX:XX格式的时间,:直接匹配时间里的冒号,\d{2}分别匹配小时、分钟、秒。
方案二:一次性匹配日期和时间
如果想更高效,可以用正则捕获组一次性抓取两个值:
$csvString = '000001 0001 000000000000001975 00 02 0 000 2017/12/13 14:13:27'; // 用捕获组同时匹配日期和时间 preg_match('/(\d{4}\/\d{2}\/\d{2}) (\d{2}:\d{2}:\d{2})/', $csvString, $matches); $result = [ 'date' => $matches[1] ?? null, // 第一个捕获组对应日期 'time' => $matches[2] ?? null // 第二个捕获组对应时间 ]; print_r($result);
补充:处理多组日期时间的场景
如果你的CSV字符串里可能存在多组日期时间,只需要把preg_match换成preg_match_all,就能拿到所有匹配结果:
// 提取所有日期 preg_match_all('/\d{4}\/\d{2}\/\d{2}/', $csvString, $allDateMatches); $allDates = $allDateMatches[0] ?? []; // 提取所有时间 preg_match_all('/\d{2}:\d{2}:\d{2}/', $csvString, $allTimeMatches); $allTimes = $allTimeMatches[0] ?? [];
内容的提问来源于stack exchange,提问作者Kasun Samanpriya
相关产品推荐
相关产品推荐

