如何用PCRE正则在PHP中捕获文件名中的无横杠日期?
在PHP中提取无横杠日期的几种方法
针对你的需求,这里有几个实用的方案可以实现从文件名中提取并去除横杠的日期:
方法1:先捕获带横杠的日期,再移除横杠
这种方法最直观,先通过正则捕获完整的日期字符串,再用字符串替换去掉横杠:
$filename = 'file-2018-02-19-second.json'; // 用更精准的日期格式匹配代替原来的通配符,避免误匹配 if (preg_match('/.*file-(\d{4}-\d{2}-\d{2}).*.json/', $filename, $matches)) { $cleanDate = str_replace('-', '', $matches[1]); echo $cleanDate; // 输出:20180219 }
这里把你原来的..........换成\d{4}-\d{2}-\d{2},可以更精准地匹配YYYY-MM-DD格式的日期,减少意外匹配的可能。
方法2:拆分捕获年、月、日,再拼接
如果后续需要单独使用年、月、日的部分,这种方法会更灵活:
$filename = 'file-2018-02-19-second.json'; if (preg_match('/.*file-(\d{4})-(\d{2})-(\d{2}).*.json/', $filename, $matches)) { $cleanDate = $matches[1] . $matches[2] . $matches[3]; echo $cleanDate; // 输出:20180219 }
正则里的三个分组分别捕获年份、月份、日期,直接拼接就得到了无横杠的日期字符串。
方法3:用preg_replace一步到位
可以直接通过正则替换,把整个文件名转换成你需要的无横杠日期:
$filename = 'file-2018-02-19-second.json'; $cleanDate = preg_replace('/.*file-(\d{4})-(\d{2})-(\d{2}).*.json/', '$1$2$3', $filename); echo $cleanDate; // 输出:20180219
这里利用正则的反向引用$1、$2、$3,直接将捕获的年、月、日拼接成结果,无需额外处理步骤。
内容的提问来源于stack exchange,提问作者Santhosh Chakka
相关产品推荐
相关产品推荐

