Шаблон регулярного выражения для строки выражения времени

Я хочу проанализировать строку выражения времени (имеет 4 группы: неделя (w), день (d), час (h) и минута (m)). Некоторые примеры:

  1. -3w 4d 2h 1m
  2. +3w 2h 1m
  3. 3d 1m
  4. 1d
  5. ...

Я придумал такой узор:

([+-]{0,1})([0-9]+)w?\s?(0?[1-9]|[12][0-9]|3[01])d?\s?([01]?[0-9]|2[0-3])h?\s?([0-5][0-9])m?
  • начинаться с + или - или без
  • значение до недели не ограничено
  • значение перед днем ​​от 0 до 31
  • значение перед часом от 0 до 23
  • значение перед минутой от 0 до 59
  • пробел(\s) необязателен

Но этот шаблон не работает. Пожалуйста помоги. Извините за мой английский!


person Minh Nguyen    schedule 05.09.2014    source источник
comment
Каким образом это не сработает?   -  person Bohemian♦    schedule 05.09.2014


Ответы (2)


^([+-]?)([0-9]+)?w?\s*?(0?[1-9]|[12][0-9]|3[01])?d?\s*?([01]?[0-9]?|2[0-3])?h?\s*?([0-5]?[0-9])?m?$

Изменил ваше регулярное выражение. Теперь работает. Возможно, потребуется дополнительное тестирование.

Смотрите демо.

http://regex101.com/r/sB4kE6/4

person vks    schedule 05.09.2014

Это то, что я использую для проверки:

 ^(?:(?:0?[0-9]|1[0-2]):[0-5][0-9]\s?(?:(?:[Aa]|[Pp])[Mm])?|(?:1[3-9]|2[0-3]):[0-5][0-9])$

Работает в формате 24:00 и 12:00 с заглавными am/pm.

Может быть, это может помочь вам в правильном направлении.

person roydukkey    schedule 05.09.2014