Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从字符串中选择捕获的值_Php_Regex - Fatal编程技术网

Php 从字符串中选择捕获的值

Php 从字符串中选择捕获的值,php,regex,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 =

我有以下字符串作为日程表

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;
}
我所期望的是从
$values
中的
preg_match()
中按其在字符串中的顺序获取每个捕获的组,我期望的最终结果是

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种不同的格式。

您正在使用:

$year = $value[2];
但是你错过了$value末尾的's'。将其更改为:

$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])) ;
您正在使用:

$year = $value[2];
但是你错过了$value末尾的's'。将其更改为:

$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])) ;

尝试请注意,您有
20018
,但可能是
2018
@WiktorStribiżew给我的
2018年6月4日-2001年6月12日[newline]这就是您的代码的问题。使用下面的解决方案。试试看。请注意,您有
20018
,但可能是
2018
@WiktorStribiżew给我的
2018年6月4日-2001年6月12日[newline]这就是您的代码的问题。使用下面的解决方案。它适用于所有情况,但
4 2018-12 2018
,而另一部分的当前日期或月份不存在
2007=>2007
您是否可以控制您接收的数据/日期?也许确保您的日期具有某种标准(或可预测)格式会有所帮助。不,只能使用php选择和更改值,不允许更新或插入。@Toleo,数据必须来自某个地方。您对输入的控制越少,您的代码就越复杂,您必须尝试解释和/或验证它。它适用于所有情况,但
4 2018-12 2018
不存在,而另一部分的当前日期或月份则不存在
2007=>2007
您对当前的数据/日期有任何控制权吗接收?也许确保您的日期具有某种标准(或可预测)格式会有所帮助。不,只能使用php选择和更改值,不允许更新或插入。@Toleo,数据必须来自某个地方。您对输入的控制越少,代码在解释和/或验证时就越复杂。