Php 是否从yyyy-m-dd提取完整日期?

Php 是否从yyyy-m-dd提取完整日期?,php,regex,Php,Regex,我有100个文件,名字如下: CPC_2001_5_21_7.pdf CPC_YYYY_M_DD_7.pdf 最后一个数字是页码,与页码无关。我想将它们分类到如下目录: YYYYMMDD ie:20010521您可以使用以下命令提取年、月和日: if (preg_match('/^CPC_(\d{4})_(\d{1,2})_(\d{1,2}).*$/', $filename, $matches)) { list($file, $year, $month, $day) = $matc

我有100个文件,名字如下:

 CPC_2001_5_21_7.pdf
 CPC_YYYY_M_DD_7.pdf
最后一个数字是页码,与页码无关。我想将它们分类到如下目录:


YYYYMMDD ie:20010521

您可以使用以下命令提取年、月和日:

if (preg_match('/^CPC_(\d{4})_(\d{1,2})_(\d{1,2}).*$/', $filename, $matches)) {
    list($file, $year, $month, $day) = $matches;
}

您可以使用以下工具提取年、月和日:

if (preg_match('/^CPC_(\d{4})_(\d{1,2})_(\d{1,2}).*$/', $filename, $matches)) {
    list($file, $year, $month, $day) = $matches;
}

您应该按下划线分割,然后使用空填充设置新文件名的格式

<?php
    $filenames = array(
        "CPC_2001_5_21_7.pdf",
        "CPC_2002_2_13_7.pdf",
        "CPC_2004_6_23_7.pdf"
    );
    $newfilenames = array();

    foreach($filenames as $filename)
    {
        $split = explode("_", $filename);

        $newfilenames[] = sprintf("%04s%02s%02s", $split[1], $split[2], $split[3]) . ".pdf";
    }

    print_r($newfilenames);
?>

您应该按下划线分割,然后使用空填充设置新文件名的格式

<?php
    $filenames = array(
        "CPC_2001_5_21_7.pdf",
        "CPC_2002_2_13_7.pdf",
        "CPC_2004_6_23_7.pdf"
    );
    $newfilenames = array();

    foreach($filenames as $filename)
    {
        $split = explode("_", $filename);

        $newfilenames[] = sprintf("%04s%02s%02s", $split[1], $split[2], $split[3]) . ".pdf";
    }

    print_r($newfilenames);
?>

如果我是你,我会用天国之神。这允许您指定一个模式并从中创建DateTime对象

那么比如说,

$date = 'CPC_2001_5_21_7.pdf';
$dt = DateTime::createFromFormat('!*Y_n_d_*.*', $date);
然后,您可以使用所需的数据构建字符串:

$filename = $dt->format('Ymd') . '.pdf';

如果我是你,我会用天国之神。这允许您指定一个模式并从中创建DateTime对象

那么比如说,

$date = 'CPC_2001_5_21_7.pdf';
$dt = DateTime::createFromFormat('!*Y_n_d_*.*', $date);
然后,您可以使用所需的数据构建字符串:

$filename = $dt->format('Ymd') . '.pdf';

为什么连CPC部分都有?省略该选项并使用。*将允许更大的范围。另外,您忘记了分隔符。当然,如果它们不是都以CPC_开头,您可以改用。*。@Frank D:mkdir'/path/to/directory/'$年。$月。$日@Frank D,您可以通过连接变量来创建目录名。示例:$directory=sprintf“%04d%02d%02d”,$year、$month、$day;。为什么连CPC部分都有?省略该选项并使用。*将允许更大的范围。另外,您忘记了分隔符。当然,如果它们不是都以CPC_开头,您可以改用。*。@Frank D:mkdir'/path/to/directory/'$年。$月。$日@Frank D,您可以通过连接变量来创建目录名。示例:$directory=sprintf“%04d%02d%02d”,$year、$month、$day;。