2014-10-11 4 views
0

Я новичок в php и изучаю регулярные выражения. Я пытаюсь использовать preg_match для преобразования стандартного времени в военное время. Данные поступают в формате «6 сентября 1991 года в 6:23 вечера». В другом месте кода я уже использовал регулярные выражения для разбиения данных на массив с элементами «Месяц», «День», «Год», «Час» и «Минуты». Я пытаюсь сказать программе посмотреть данные, и если она закончится в PM, добавьте 12 к элементу «Час». Вот мой код:PHP: регулярное выражение с preg_match

if (preg_match("/[A-Za-z0-9,:\s]*[PM]/", $original_data)) { 
     $broken_data[$j][3]= $broken_data[$j][3] + 12; 
    } 

Где $ original_data является строка в формате «6 сентября 1991 в 6:23 вечера» и $ broken_data это массив описано выше. То, что я думаю, что preg_match делает (и намеревается это сделать), возвращает true, если есть какое-то количество A-Z, a-z, 0-9,:, запятых или пробелов, за которыми следует PM. Как это неправильно?

Спасибо заранее!

+3

'[PM]' Соответствует одному символу 'P' или' M' –

+0

И - в соответствии с [PHP Docs] (http://php.net/manual/en/function.preg-match .php), вам нужно передать '$ broken_data' в качестве аргумента, чтобы получить компоненты в виде массива. –

+0

Спасибо, Авинаш! Изменил его на [P] [M], и он отлично работает. – zath1164

ответ

0

Вы можете пропустить preg_match целиком и полностью использовать StrToTime() и str_replace()

Однако формат, который у вас есть перерывы, когда у вас есть «на» в строке, и именно поэтому мы используем str_replace, чтобы избавиться от Это.

// converts to "September 6, 1991 6:23PM" 
$time = str_replace(" at ", " ", "September 6, 1991 at 6:23PM"); 
// You will need to change this to the format you want outputted 
echo date("M d, Y H:i" , strtotime($time)); 
Смежные вопросы