본문으로 건너뛰기

전방탐색과 후방탐색

어디서 텍스트를 찾을지 지정하고 싶을 때 전후방탐색(lookaround)을 사용합니다.

일부 정규 표현식 문서에서는 일치하는 영역을 반환하는 작동을 표현할 때 '소비한다(consume)'는 용어를 씁니다. 반면 전후방탐색은 '소비하지 않는다'고 말할 수 있습니다.

전후방탐색 일치는 실제로 결과를 반환하지만 반환된 문자의 길이가 항상 0입니다. 따라서 전후방탐색은 흔히 '제로 폭(zero-width)'이라고 불립니다.

모든 하위 표현식 앞에 ?=?<=를 붙이면 전후방탐색 표현으로 바꿀 수 있습니다.

전방탐색

전방탐색 패턴의 구문은 ?=로 시작하고 = 다음에 일치할 텍스트가 오는 하위 표현식입니다.

예를 들어 각 URL에서 프로토콜의 위치를 추출하고 싶다면 .+(?=:)을 이용할 수 있습니다. 이 정규 표현식과 .+(:)의 차이는 :을 검색 결과에 포함시키는지 여부입니다.

후방탐색

후방탐색 연산자는 ?<=입니다. 사용 방법은 전방탐색과 동일합니다.

전방탐색 패턴은 .+를 포함하여 텍스트의 길이를 다양하게 일치시킬 수 있으며 매우 동적입니다. 반면 후방탐색 패턴은 보통 일치시킬 텍스트의 길이를 고정해야 합니다.

HTML 제목의 텍스트만 추출하고 싶다면 전방탐색과 후방탐색을 함께 사용해 다음과 같은 정규 표현식을 작성할 수 있습니다.

(?<=<[tT][iI][tT][lL][eE]>).*(?=<\/[tT][iI][tT][lL][eE]>)
(?<=<[tT][iI][tT][lL][eE]>).*(?=<\/[tT][iI][tT][lL][eE]>)

이 예시에서는 혼란을 방지하고자 <을 이스케이프하는 편이 좋을 수 있습니다.

부정형 전후방탐색

부정형(negative) 전후방탐색은 많이 쓰이지 않는 기능으로 지정한 패턴과 일치하지 않는 텍스트를 찾습니다.

전후방탐색 명령에서 부정형을 나타낼 때는 = 대신 !를 사용합니다.

종류긍정형부정형
전방탐색(?=)(?!)
후방탐색(?<=)(?<!)

다음 정규 표현식은 앞에 $가 없는 숫자를 찾습니다.

\b(?<!\$)\d+\b
\b(?<!\$)\d+\b