#regex
#регулярное выражение
Вопрос:
Мне нужно регулярное выражение для проверки количества лет, дней или месяцев.
1d
или 1 d
или 1 day
и т.д. Для анализа количества дней
Или 1-y
или 1.5 year
и т.д. Для разбора лет. или 2 m
, 2 months
и т.д. в течение нескольких месяцев.
Я не буду комбинацией разных единиц измерения, таких как 1 год 3 месяца, так что об этом не стоит беспокоиться.
Вот регулярное выражение, которое я создал до сих пор для анализа дней.
b([0-9]{1,4}[-.s](d|day)?)b
Проблема в том, что оно также сопоставляет числовые значения, такие как 555.
, 98.
и т.д.
Чего не хватает и должно ли это быть?
Комментарии:
1. не делайте группу
(d|day)?
необязательной, удалите знак вопроса.2. можете ли вы привести еще несколько примеров исходных данных.
3. Для дней я хочу сопоставить — 1d или 1-d или 1 d или 60 дней Одинаково для лет и месяцев — 1m или 1 m или 1month или 1 месяц В принципе, m, месяц, y, год, d, день должны быть приемлемыми в качестве единицы измерения. и целочисленное значение для дня, десятичное значение для месяца и года в качестве значения. и либо один пробел, либо без пробела, либо . или — в качестве разделителя
Ответ №1:
Попробуйте:
bd{1,4}(?:.d)?(?:-|s*)(?:d|days?|m|months?|y|years?)b
Это позволяет использовать ровно 1 цифру после необязательной десятичной точки. Если вы хотите разрешить больше, вы можете добавить туда квантификатор.
Комментарии:
1. @user3801109 пожалуйста, объясните в своем вопросе, чему вы хотите соответствовать, а чему нет.
2. Я забыл сделать десятичную часть необязательной. Исправлено.