Шаблон регулярного выражения для строки выражения времени
Я хочу проанализировать строку выражения времени (имеет 4 группы: неделя (w), день (d), час (h) и минута (m)). Вот некоторые примеры:
- -3 Вт 4д 2ч 1м
- +3 Вт 2 ч 1 м
- 3d 1м
- 1d
- ...
Я придумал этот шаблон:
([+-]{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?$
Изменено ваше регулярное выражение. Работает сейчас. Возможно, потребуется больше тестирования.
Смотрите демо.
Вот что я использую для проверки:
^(?:(?: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.
Может быть, это может помочь вам в правильном направлении.