Помогите составить regexp выражение для PHP

В переменной может содержаться: 1 день, 2 дня, 5 дней, 19 дней, 21 день, 1-2 дня, 22-27 дней

Если одно число, то получить его, если два числа, то большее. PS. совсем не могу пока разобраться с регуляркой.

 .*\b(\d+)\b.*

Спасибо @teran


Ответы (1 шт):

Автор решения: teran

извлечь второе число можно с помощью выражения

.*\b(\d+)

\b обозначает границу слова. так что этому выражению будет соответствовать произвольная строка, потом разделитель и искомое число.

в целом вы просто можете вычленить из строки все (\d+) и с помощью preg_match_all('/(\d+)/', $str, $matches) получите 1 или 2 совпадения. возьмете последнее совпадение из $matches - array_pop($matches[0]);

на само деле решений может довольно много для этой задачи. Можно например, применить альтернацию сначала поискав пару число-число или просто число

(?:\d+-(\d+))|(\d+)

второе число из первой маски и просто число из второй вернуть в группу захвата.

→ Ссылка