Я не понимаю необязательный синтаксис группы в регулярных выражениях

Это моя тестовая строка / фраза / текст …

8:58 вечера UberX 32m 0s 13,87

Продолжительность может быть днем, часами, минутами и секундами. Я, наверное, никогда не увижу дни, но часы возможны.

(\d+)m.(\d+)s

Которые в этом случае дают мне 32 и 0 в выражении php preg_match.

Теперь я попытался поставить (\ d +) h ?. перед приведенным выше регулярным выражением, добавив 2 часа в мою тестовую строку, и я сломал ее.

Попытка выучить регулярные выражения по крупицам.

Я благодарен за любую помощь, оказанную мне на пути!
Спасибо!

0

Решение

/(\d+(?=d\W))|(\d+(?=h\W))|(\d+(?=m\W))|(\d+(?=s\W))/

При этом используется положительный прогноз для сопоставления только цифр, за которыми сразу следуют d, h, m или s

1

Другие решения

? применяется к токену, непосредственно предшествующему ему. В вашем примере это делает h необязательным, но цифры по-прежнему обязательны. Вы можете сделать эту работу, заключив всю часть, которую вы используете, чтобы сделать ее необязательной в группу без захвата: (?:(\d+)h)?

1

По вопросам рекламы [email protected]