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

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

  1. -3 Вт 4д 2ч 1м
  2. +3 Вт 2 ч 1 м
  3. 3d 1м
  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) является необязательным

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

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

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

 ^(?:(?: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.

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

Другие вопросы по тегам