Регулярное выражение, содержащее то или иное слово

84

Мне нужно создать выражение, соответствующее целому числу, за которым следует либо «секунды», либо «минуты».

Я пробовал это выражение: ([0-9]+)\s+(\bseconds\b)|(\bminutes\b)

Он отлично работает в течение секунд, но не минут.

Например, «5 секунд» дает 5 секунд; а "5 минут" дает ;; минуты

user965748
источник

Ответы:

99

Вы просто пропустили лишнюю пару скобок для символа «ИЛИ». Следующее должно помочь:

([0-9]+)\s+((\bseconds\b)|(\bminutes\b))

Без них вы либо сопоставляли число, за которым следовали секунды, либо просто слово минуты

микантокс
источник
17
но это «дополнительное совпадение», которое не требуется. Либо использовать, ([0-9]+)\s+(?:(\bseconds\b)|(\bminutes\b))либо([0-9]+)\s+(\bseconds\b|\bminutes\b)
узнать
3
Да, это правда, скобки вокруг \ bseconds \ b и \ bminutes \ b не нужны!
micantox
34

Вы можете использовать одну группу для секунд / минут. Следующее выражение может удовлетворить ваши потребности:

([0-9]+)\s*(seconds|minutes)

Онлайн-демонстрация

Мисталис
источник