从包含日期的字符串过滤日期

时间:2014-02-05 18:34:42

标签: php regex date

我有一个字符串,其中包含Google Calender 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 />';

但这回应了:

Mon Jun 30, 2014 // as expected
Mon Jul 7, 2014 \u003cbr /\u003e \u003cbr /\u003eEvent Status: confirmed // not expected, should be "Mon Jul 7, 2014"

我在split()中遗漏了什么?顺便说一下,有没有一个正则表达式的解决方案呢?

2 个答案:

答案 0 :(得分: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() $matches [1]和[2]。

答案 1 :(得分:2)

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

您可以使用捕获组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);