2014-02-05 3 views
0

У меня есть строка, которая имеет даты от 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" 
}, 

Я думал о выполнении функции для «чистой» с помощью раскол, что-то вроде:

$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

Смежные вопросы