Organizamos os grupos de captura, os grupos nomeados e o lookaround.
Os parênteses (...) criam um grupo de captura. Você pode extrair a parte correspondente como um pedaço à parte ou reutilizá-la em uma expressão de substituição com $1, $2. Se quiser criar um grupo, mas sem capturá-lo, use (?:...) para um grupo sem captura.
(?<name>...) é um grupo de captura nomeado. Como se pode acessá-lo pelo nome em vez do número, a legibilidade melhora à medida que o padrão fica mais longo. Na substituição, ele é referenciado com $<name>.
O lookahead (?=...) casa a posição em que determinado padrão vem em seguida, e (?!...), a posição em que ele não vem, sem consumir essa parte. O lookbehind (?<=...) e (?<!...) verificam o que vem antes da mesma maneira.
O ponto central do lookaround é ser uma "condição que não consome". Ele é poderoso ao exigir várias condições sobrepostas, como na verificação de senha forte, ou quando se quer substituir apenas em determinado contexto.