2014-02-05 150 views
0

我有了从谷歌日历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" 
}, 

我想过做一个函数来“干净”的使用分裂,是这样的:

$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

你应该做一个'的var_dump($ splitOne [1]); ',也许'\ n'之前的字符不是空格。你也可以用'\ n'爆炸并修剪结果。 – jeroen

+0

@jeroen,var_dump给了'string(75)“Mon Jul 7,2014 \ u003cbr/\ u003e \ u003cbr/\ u003eEvent状态:确认”' – Rikard

+0

没有'\ n'这样也没有解决方案,也没有解决方案寻找'\ n'正在工作...... – jeroen

回答

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]。

+0

谢谢,这工作得很好! – Rikard

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); 
+0

+1为__ [regex101](http://regex101.com/r/uW7oH2)__链接 – Sergio