Php 从带有日期的字符串中筛选日期
我有一个字符串,其中包含来自Google日历JSON的日期,我需要以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
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:没错。对我来说很神秘。。。知道为什么吗@杰罗恩,爆炸:/