정규표현식, 전방 탐색과 후방 탐색 (Regex Lookaround match) 이란?
- 보통 패턴에 매칭되는 문자가 아니라, 패턴에 매칭되는 문자의 앞, 뒤를 찾을 때 이용한다.
- 정규식은 보통 문자를 '소비'하면서 찾아가는데, 전방탐색과 후방탐색(Lookaround match)은 소비하지 않는다.
- '소비'란 것은 한번 패턴을 찾으면 더이상 그 전으로 돌아가지 못하는 것을 이야기한다.
종류
- 전방 탐색 (Positive Lookahead)
(?=)
- 부정형 전방 탐색 (Negative Lookahead)
(?!)
- 후방 탐색 (Positive Lookbehind)
(?<=)
- 부정형 후방 탐색 (Negative Lookbehind)
(?<!)
(?=)
전방 탐색 (Positive Lookahead)
- 패턴 앞의 문자만 매칭된다.
- 패턴 자체는 매칭시키지 않는다.
문법과 의미
- 문법:
X(?=Y)
- 의미:
X
가Y
앞에 온다면, 매칭된다.
예제
- 이메일 데이터에서 이메일의 아이디 부분만 추출하고 싶을 때 사용할 수 있다.
.*(?=@)
- 위의
문법과 의미
섹션의문법
의X
자리에.*
가 왔고,Y
자리에@
가 온 형태이다. @
앞의 모든 문자를 선택하라는 의미이다.
- 위의
(?!)
부정형 전방 탐색 (Negative Lookahead)
- 전방 탐색과 반대 논리이다.
문법과 의미
- 문법:
X(?!Y)
- 의미:
X
가Y
앞에 오지 않는다면 매칭된다.
예제
- 나이, 키, 몸무게 데이터에서 몸무게 (
kg
) 를 제외한 데이터를 가져오고 싶다면? \d+(?!kg)
kg
앞의 숫자는 제외한다는 의미이다.
약간의 문제가 있다. 숫자 하나만 제외되고 그 앞의 문자가 매칭된다.
수정
\d+(?!\d*kg)
이제
kg
앞에 오는 숫자만 빼고 나머지 숫자들이 매칭된다.
(?<=)
후방 탐색 (Positive Lookbehind)
- 패턴 뒤의 문자만 매칭된다.
- 패턴 자체는 매칭되지 않는다.
문법과 의미
- 문법:
(?<=Y)X
- 의미:
Y
뒤에X
가 온다면 매칭된다.
예제
- 달러 기호 뒤의 숫자를 가져오고 싶다면?
(?<=\$)\d+
$
뒤에 숫자가 있으면 매칭된다.$
는 메타 문자 중 하나이기 때문에 앞에 이스케이프(\
) 를 붙여주어야 한다.
(?<!)
부정형 후방 탐색 (Negative Lookbehind)
- 후방 탐색과 반대 논리이다.
문법과 의미
- 문법:
(?<!Y)X
- 의미:
Y
뒤에X
가 오지 않는다면 매칭된다.
예제
- 엔(¥) 과 달러($) 와 유로(€) 로 표기된 금액 중에 달러 기호 뒤의 숫자만 빼고 가져오고 싶다면?
(?<!\$\d*)\d+
- 부정형 전방 탐색에서 썼던 것과 같은 트릭이 쓰였다.
요약
- 정규표현식에는 값을 소비하지 않는 전방탐색과 후방탐색이 있다.
- 패턴에 매칭되는 문자보다는 패턴 앞,뒤로 매칭되는 문자에 관심이 있을 때 사용한다.
- 전방 탐색을 사용하면 패턴 앞의 문자가 매칭된다.
- 후방 탐색을 사용하면 패턴 뒤의 문자가 매칭된다.
- 부정형을 사용하면 해당 케이스를 제외한 나머지 케이스가 매칭된다.
반응형
'정규표현식' 카테고리의 다른 글
정규표현식 ? (물음표) 기호 사용법 (non-greedy matching, lazy-quantifier) (0) | 2023.04.02 |
---|---|
정규표현식 Lookaround (Lookahead, Lookbehind) 알아보기 (0) | 2022.12.28 |