Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.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_Date - Fatal编程技术网

Php 从带有日期的字符串中筛选日期

Php 从带有日期的字符串中筛选日期,php,regex,date,Php,Regex,Date,我有一个字符串,其中包含来自Google日历JSON的日期,我需要以YYY-MM-DD格式检索日期: "content": { "$t": "When: Mon Jun 30, 2014 to Mon Jul 7, 2014 \n\u003cbr /\u003e\n\n\n\u003cbr /\u003eEvent Status: confirmed", "type": "html" }, 我考虑过使用split做一个函数来“清理”,比如: $string = "When: M

我有一个字符串,其中包含来自Google日历JSON的日期,我需要以
YYY-MM-DD
格式检索日期:

"content": {
    "$t": "When: Mon Jun 30, 2014 to Mon Jul 7, 2014 \n\u003cbr /\u003e\n\n\n\u003cbr /\u003eEvent Status: confirmed",
    "type": "html"
},
我考虑过使用split做一个函数来“清理”,比如:

$string = "When: Mon Jun 30, 2014 to Mon Jul 7, 2014 \n\u003cbr /\u003e\n\n\n\u003cbr /\u003eEvent Status: confirmed";
$splitOne = split(' to ',$string);
$firstDate = split('When: ', $splitOne[0]);
$secondtDate = split(' \n', $splitOne[1]);
echo $firstDate[1]; echo '<br />';
echo $secondtDate[0]; echo '<br />';

split()
中缺少什么?顺便说一句,有没有一个正则表达式解决方案呢?

仅仅使用正则表达式可能更容易:

$string = "When: Mon Jun 30, 2014 to Mon Jul 7, 2014 \n\u003cbr /\u003e\n\n\n\u003cbr /\u003eEvent Status: confirmed";

preg_match('/When: (.*) to ([^\n]+)/', $string, $matches);

print_r($matches);

然后,如果需要,
trim()
$matches
[1]和[2]匹配。

使用正则表达式可能更容易:

$string = "When: Mon Jun 30, 2014 to Mon Jul 7, 2014 \n\u003cbr /\u003e\n\n\n\u003cbr /\u003eEvent Status: confirmed";

preg_match('/When: (.*) to ([^\n]+)/', $string, $matches);

print_r($matches);

然后
trim()。我为你吐了一个正则表达式

您可以使用捕获组1-6提取所需的信息,并将其转换为所需的格式

正则表达式是:

(?:When:\s[a-zA-Z]{3}\s([a-zA-Z]{3})\s(\d\d?)\,\s(\d{4})\sto\s[a-zA-Z]{3}\s([a-zA-Z]{3})\s(\d\d?)\,\s(\d{4})).*
使用捕获组:

\1 = Jun
\2 = 30
\3 = 2014
\4 = Jul
\5 = 7
\6 = 2014
PHP代码示例:

$re = '/(?:When:\s[a-zA-Z]{3}\s([a-zA-Z]{3})\s(\d\d?)\,\s(\d{4})\sto\s[a-zA-Z]{3}\s([a-zA-Z]{3})\s(\d\d?)\,\s(\d{4})).*/'; 
$str = 'When: Mon Jun 30, 2014 to Mon Jul 7, 2014 \n\u003cbr /\u003e\n\n\n\u003cbr /\u003eEvent Status: confirmed'; 

preg_match($re, $str, $matches);

有一个正则表达式解决方案。我为你吐了一个正则表达式

您可以使用捕获组1-6提取所需的信息,并将其转换为所需的格式

正则表达式是:

(?:When:\s[a-zA-Z]{3}\s([a-zA-Z]{3})\s(\d\d?)\,\s(\d{4})\sto\s[a-zA-Z]{3}\s([a-zA-Z]{3})\s(\d\d?)\,\s(\d{4})).*
使用捕获组:

\1 = Jun
\2 = 30
\3 = 2014
\4 = Jul
\5 = 7
\6 = 2014
PHP代码示例:

$re = '/(?:When:\s[a-zA-Z]{3}\s([a-zA-Z]{3})\s(\d\d?)\,\s(\d{4})\sto\s[a-zA-Z]{3}\s([a-zA-Z]{3})\s(\d\d?)\,\s(\d{4})).*/'; 
$str = 'When: Mon Jun 30, 2014 to Mon Jul 7, 2014 \n\u003cbr /\u003e\n\n\n\u003cbr /\u003eEvent Status: confirmed'; 

preg_match($re, $str, $matches);

您应该执行
var_转储($splitOne[1])
,可能
\n
前面的字符不是空格。您还可以在
\n
上爆炸并修剪结果。@jeroen,var\u dump给出了
字符串(75)“2014年7月7日星期一\u003cbr/\u003e\u003cbr/\u003eEvent Status:confirm”
那里没有
\n
,因此您的解决方案或寻找
\n
的解决方案也不会起作用…@jeroen:没错。对我来说很神秘。。。知道为什么吗@jeroen,with explode:/n应该执行
var_转储($splitOne[1])
,可能
\n
前面的字符不是空格。您还可以在
\n
上爆炸并修剪结果。@jeroen,var\u dump给出了
字符串(75)“2014年7月7日星期一\u003cbr/\u003e\u003cbr/\u003eEvent Status:confirm”
那里没有
\n
,因此您的解决方案或寻找
\n
的解决方案也不会起作用…@jeroen:没错。对我来说很神秘。。。知道为什么吗@杰罗恩,爆炸:/