Разбираем группы захвата, именованные группы и lookaround.
Скобки (...) создают группу захвата. Совпавшую часть можно отдельно извлечь как фрагмент или повторно использовать в строке замены через $1·$2. Если группа нужна, но захват нежелателен, используйте группу без захвата (?:...).
(?<name>...) — это именованная группа захвата. К ней можно обращаться по имени вместо номера, что улучшает читаемость по мере усложнения шаблона. В замене на неё ссылаются через $<name>.
Просмотр вперёд (?=...) сопоставляет позицию, за которой идёт определённый шаблон, а (?!...) — позицию, за которой его нет, при этом эта часть не потребляется. Просмотр назад (?<=...) и (?<!...) точно так же проверяют то, что стоит впереди.
Ключевое в lookaround — это «условие, которое не потребляется». Он мощен, когда нужно совместить несколько условий, как при проверке надёжного пароля, или когда замену нужно делать только в определённом контексте.