$date = '2009-12-25';
$ptn = '/([\d]{4})[- \/](0?[\d]|1[0-2])[-\/ ](0?[\d]|[1-2][\d]|3[0-1])/';
if (preg_match($ptn,$date,$out))
{
    print_r($out);exit();
}结果为:
Array
(
    [0] => 2009-12-2
    [1] => 2009
    [2] => 12
    [3] => 2
)
不能匹配最后一数字,即$out[3]为2,而不是25,为什么?

解决方案 »

  1.   

    2满足0?[\d],就不会去找后面的匹配了。$ptn = '/([\d]{4})[- \/](0?[\d]|1[0-2])[-\/ ](0?[\d]|[1-2][\d]|3[0-1])$/';
      

  2.   

    把0的匹配放后面,但是我觉得直接用date_parse就可以了,没必要自己写正则吧。
    $date = '2009-12-25';
    $ptn = '/(\d{4})[- \/](1[0-2]|0?\d)[-\/ ]([1-2]\d|3[0-1]|0?\d)/';
    if (preg_match($ptn,$date,$out))
    {
        print_r($out);
    }
    print_r(date_parse($date));