我有一个字符串,其中包含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()
中遗漏了什么?顺便说一下,有没有一个正则表达式的解决方案呢?
答案 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);