2013-07-17 2 views
1

У меня возникли проблемы с инструкцией preg_match this time.Использование регулярных выражений для соответствия временному интервалу

TF 02:30 pm-04:00 am 

Я был в состоянии отделить время в массив, но я также хочу, чтобы получить AM и PM, а также письма T и F. Это для модуля расписания классов, над которым я работаю. Данные, которые я получил из базы данных, это строка. Я хочу разделить их так, чтобы я мог манипулировать записями для календаря, который у меня есть.

Вот что я имею в этой точке.

$sampleString = 'T 02:30 pm-04:00 am'; 
$pattern = '/([0-1]?\d|2[0-9]):([0-5]?\d)/'; 
preg_match_all($pattern,$sampleString,$time); 

print_r($time); 

Выход:

Array ( 
    [0] => Array ( 
      [0] => 02:30 
      [1] => 04:00) 
    [1] => Array ( 
      [0] => 02 
      [1] => 04) 
    [2] => Array ( 
      [0] => 30 
      [1] => 00) 
) 

Спасибо.

+0

что вы хотите получить именно? покажите нам пример, как вы это делали и на время –

+0

Во-первых, вы не можете построить шаблон, основанный только на одном примере - вам нужно знать, какие возможные значения могут содержать каждая часть строки. Разделите строку на части и создайте небольшое регулярное выражение для каждого из них - например, вы можете сопоставить первую часть с '/ T? F? /'. Не беспокойтесь о том, чтобы захватить нужные части, когда вы тестируете - как только вы знаете, как соответствовать всей строке, вы можете пройти через полное регулярное выражение, какие части вам нужно захватить, и обернуть их в скобки. – IMSoP

+0

шаблон для строки: «[MTWHFSS] [0-1] [0-2]: [0-5] [0-9] [am | pm] - [0-1] [0-2]: [0-5] [0-9] [am | pm] ". Я хочу получить день, который является либо «М», либо «W», часом, минутой и будет ли это am или pm. – Paul

ответ

1

В соответствии с рекомендациями IMSoP, разделение этого на части упрощает (если смотреть снова, я думаю, что ваше часовое регулярное выражение может использовать улучшения, так как оно будет принимать часы от 0 до 29, вместо этого я заменил его на 0?[1-9]|1[0-2], чтобы принимать только 1 - 12)

  • Дни: [MTWHFS]+
  • Площадь: \s
  • час: 0?[1-9]|1[0-2]
  • Colon: :
  • минуту: [0-5]?\d
  • Площадь: \s
  • утра/вечера: [ap]m
  • дефис: -
  • час: 0?[1-9]|1[0-2]
  • Colon: :
  • Минуты: [0-5]?\d
  • Площадь: \s
  • AM/PM: [ap]m

Тогда просто поставить их вместе, окружающие желательные захватив группы в скобках:

([MTWHFS]+)\s(0?[1-9]|1[0-2]):([0-5]?\d)\s([pa]m)-(0?[1-9]|1[0-2]):([0-5]?\d)\s([pa]m) 
+0

Спасибо .. Отличная помощь !!! – Paul

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