Разберу всё по порядку:
. - Точка. Совпадает с любым символом, кроме перевода строки.
+ - Квантификатор совпадений. Обозначает одно или более совпадений с предшествующим квантификатору символом или шаблоном.
? - Квантификатор совпадений. Обозначает ноль или одно совпадение с предшествующим квантификатору символом или шаблоном.
(...) - Определяет вложенный шаблон, который может использоваться для группировки некоторых элементов.
В данном примере квантификатор
? работает как "таблетка от жадности". Устанавливая его после квантификаторов
+ или
* будет ставиться минимальное совпадение по шаблону.
Также для отключение жадности есть модификатор
U устанавливая его в регулярном выражении "жадные" квантификаторы становятся "ленивыми", а "жадность" включается квантификатором
?
Тоесть приведённое мной выше регулярное выражение может быть записано так: