Wyrażenie regularne zawierające jedno lub drugie słowo

84

Muszę utworzyć wyrażenie pasujące do liczby całkowitej, po której następuje „sekundy” lub „minuty”

Spróbowałem tego wyrażenia: ([0-9]+)\s+(\bseconds\b)|(\bminutes\b)

Działa dobrze przez kilka sekund, ale nie minut.

Np. „5 sekund” daje 5 sekund; podczas gdy „5 minut” daje ;; minuty

user965748
źródło

Odpowiedzi:

99

Właśnie przegapiłeś dodatkową parę nawiasów dla symbolu „LUB”. Poniższe powinny załatwić sprawę:

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

Bez nich dopasowałbyś liczbę, po której następowałyby sekundy LUB tylko słowo minuty

micantox
źródło
17
ale to „dodatkowe dopasowanie”, które nie jest wymagane. Albo użyj ([0-9]+)\s+(?:(\bseconds\b)|(\bminutes\b))albo([0-9]+)\s+(\bseconds\b|\bminutes\b)
dognose
3
Tak, to prawda, nie ma potrzeby stosowania nawiasów wokół \ bsekund \ b i \ bminut \ b!
micantox
34

Możesz użyć pojedynczej grupy przez sekundy / minuty. Poniższe wyrażenie może odpowiadać Twoim potrzebom:

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

Demo online

Mistalis
źródło