Регулярное выражение для проверки пользовательской буквенно-цифровой строки

#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. Я забыл сделать десятичную часть необязательной. Исправлено.