Скобки или нет, вся совпадающая подстрока всегда захватывается - думайте о ней как о группе захвата по умолчанию. Явные группы захвата позволяют вам работать с небольшими кусками текста в пределах общего соответствия.
В учебнике, на который вы ссылаетесь, действительно перечислены конструкции группировки под заголовком "разделители шаблонов", но это неверно, и фактическое описание не намного лучше:
(pattern), (?:pattern)
Соответствует всему содержащемуся шаблону.
Ну, конечно, они будут соответствовать (или попытаться)! Но то, что круглые скобки делают, обрабатывает весь содержащийся sub шаблон как единое целое, поэтому вы можете (например) добавить к нему квантификатор:
(?:foo){3} // "foofoofoo"
(?:...)
- это чисто группирующая конструкция, в то время как (...)
также захватывает все совпадения вложенного подшаблона.
С помощью быстрого обзора я обнаружил еще несколько примеров неточных, неоднозначных или неполных описаний. Я предлагаю вам немедленно снять этот учебник и вместо него добавить в закладки: регулярные выражения.info .