从字符串中选择捕获的值

时间:2018-06-04 13:09:26

标签: php regex

我有一个日程表的字符串

Jun 4, 2018 => Jun 12, 20018

我要做的是获取每个日期的每个值,如下所示:

$schedule = explode('=>', 'Jun 4, 2018 => Jun 12, 20018');
foreach ($schedule as $date) {
    preg_match('/([a-z]{3})|(\b[0-9]{2}\b)|([0-9]{4})/i', $date, $values);
    $day = $values[1];
    $month = $values[0];
    $year = $values[2];
    echo $day.'-'.$month.'-'.$year;
}

我的期望是让每个捕获组从preg_match()中的$values按顺序排列在字符串中,我期望的最终结果是

4-6-2018
12-6-2018

等样本相同
   Jan 2007 =expected-result> 0-6-2018
   12 2007 =expected-result> 12-0-2018
   2007 =expected-result> 0-0-2018

但我收到了错误

E_NOTICE : type 8 -- Undefined variable: value -- at line 8
Jun-Jun-
E_NOTICE : type 8 -- Undefined variable: value -- at line 8
Jun-Jun-

我不知道是否可以使用DateTime代替RegEx,因为日期格式不是静态的,并且有3种不同的格式。

1 个答案:

答案 0 :(得分:2)

您正在使用:

$year = $value[2];

但你错过了'在价值结束时。将其更改为:

$year = $values[2];
顺便说一下,您可以更轻松地使用以下内容:

$schedule = explode('=>', 'Jun 4, 2018 => Jun 12, 2018');
$start = date('d-m-Y',strtotime($schedule[0])) ;
$end = date('d-m-Y',strtotime($schedule[1])) ;