앞뒤 조건을 함께 확인하고 가운데 값만 잡아
후방 탐색과 전방 탐색을 같은 매칭의 양쪽에 둘 수 있어. 두 조건은 경계를 확인할 뿐 소비하지 않아서 실제 결과에는 가운데 텍스트만 남아.
대괄호 사이의 값만 추출해 봐
(?<=\[)[^\]]+(?=\])
(?<=\[)는 바로 앞의 여는 대괄호를 확인하고[^\]]+는 닫는 대괄호가 아닌 문자를 하나 이상 소비하고(?=\])는 바로 뒤의 닫는 대괄호를 확인해.
[value]에 적용하면 매칭 결과는 value만 남아.
캡처 그룹으로도 같은 값을 꺼낼 수 있어
\[([^\]]+)\]로 전체 구간을 매칭한 다음 m.group(1)을 꺼내도 돼. 어느 방식이 더 낫다기보다 값의 경계를 패턴 결과에 직접 반영할지, 호출 코드에서 그룹을 꺼낼지의 차이야.
전후방 탐색이 잘 맞는 경우
findall에서 구분자를 제외한 문자열 목록을 바로 받고 싶을 때ripgrep --pcre2처럼 전후방 탐색을 지원하는 검색·치환 도구에 같은 패턴을 쓸 때- 더 큰 패턴에서 캡처 번호를 추가하지 않고 경계만 확인하고 싶을 때
캡처 그룹이 더 나은 경우
- Go나 RE2처럼 후방 탐색을 지원하지 않는 엔진을 사용할 때
- 엔진이 허용하지 않는 가변 길이 앞 문맥을 다뤄야 할 때
- 치환 과정에서 구분자를 포함한 전체 매칭과 안쪽 값을 모두 사용할 때