그룹 안에 다른 그룹을 넣을 수 있어
바깥 그룹은 안쪽 표현 전체가 매칭한 값을 담고, 안쪽 그룹은 각자 맡은 조각을 따로 담아. 같은 입력을 여러 크기로 꺼내야 할 때 유용해.
((\d+)-(\d+))을 42-1138에 적용하면 다음 세 값이 생겨.
- 그룹 1은 바깥 괄호가 잡은
42-1138이고 - 그룹 2는 첫 안쪽 괄호가 잡은
42이고 - 그룹 3은 둘째 안쪽 괄호가 잡은
1138이야.
번호는 닫히는 순서가 아니라 열리는 순서로 붙어
엔진은 패턴을 왼쪽에서 오른쪽으로 읽으며 여는 괄호를 만날 때마다 다음 번호를 줘. 그래서 (a(b)c)(d)에서는 가장 먼저 열린 바깥 괄호가 그룹 1, 그 안의 (b)가 그룹 2, 마지막 (d)가 그룹 3이야.
중첩이 깊어지면 이름으로 빠져나와
번호만 쓰면 괄호 하나를 추가했을 때 호출 코드와 역참조를 줄줄이 고쳐야 할 수 있어. 의미 있는 캡처에는 이름을 붙이고, 범위만 묶는 괄호에는 비캡처 그룹을 쓰면 번호에 의존하는 부분을 줄일 수 있어.