정규표현식(regex)의 특수한 일을 하는 특수문자
정규표현식을 보다보면, 의미가 있는 특수문자들이 있습니다.
(?!) (?=) 과 같은 뭐지(?) 싶은 문자들이 있는데요.
이건 바로 전후방탐색이라는 Lookaround 를 의미합니다.
regexr.com 로 예시를 스크린샷하여 설명드리겠습니다.
전방탐색(Positive lookahead) - (?=)
전방탐색은 앞에서부터 탐색을 하며 해당 문자열은 포함시키지 않습니다.
Lookahead 라 불리는데, 한번 예시로 알아보겠습니다.
돈을 regex로 추출할 때 돈의 단위는 빼고 숫자만 추출하고 싶다면 어떻게 해야할까요?
단순하게 숫자만 본다고 한다면 \d+ 면 끝나겠죠?
하지만, 이 숫자 뒤에 돈의 단위를 나타내는 단어까지 검색하고 그 숫자만 보여주고 싶다면 어떻게 표현할 수 있을까요?
이 때 필요한게 전방탐색, 바로 ?=를 이용할 때입니다.
\d+(?=원)
이렇게 쓰게 되면 뒤에 원이 붙어 있는 숫자들만 보이게 됩니다.
후방탐색(Positive lookbehind) - (?<=)
후방탐색은 뒤에서부터 탐색을 하며 해당 문자열은 포함시키지 않습니다.
Lookbehind 라 불리는데, 한번 예시로 알아보겠습니다.
동일하게 돈에 관련된 예시로 보겠습니다.
이번엔 원이 아니라 앞에 붙이는 $에 대한 숫자를 보여주고 싶다면 어떻게 표현할 수 있을까요?
이 때 필요한게 후방탐색, 바로 ?<=를 이용할 때입니다.
(?<=\$)\d+
이렇게 쓰게 되면 뒤에 $가 있는데, $를 뺀 숫자들만 보이게 됩니다.
($는 맨 앞이라는 의미가 있기 때문에 그 의미를 빼기 위해 \를 이용해 일반문자로 바꿔준 것입니다)
혼용사용
앞에는 '$' 뒤에는 '원' 인 숫자를 추출한다고 가정한다면 어떻게 할까요? 바로 전방, 후방탐색을 모두 사용하면 됩니다.
(?<=\$)\d+(?=원)
요약하자면 아래와 같습니다.
후방탐색 단어 전방탐색
(?<=[후방탐색])매칭될 문자열(?=[전방탐색])
이번엔 부정형을 의미하는 !가 들어간 탐색을 알아보겠습니다.
부정형 전방탐색(Negative lookahead) - (?!)
부정형 전방탐색은 전방탐색과 유사합니다. 다만 부정형이 붙어있다는 것이 포인트입니다.
부정형을 단순하게 말하면 없어야한다는 의미이죠.
부정형 전방탐색의 키는 바로 ?!입니다.
아까 예를 들은 "숫자+원"을 다시 예로 들어보자면, 숫자 + 원이 없는 것만 탐색되게 됩니다.
100원이라면 원이 들어있는 원 앞에있는 숫자 0은 매칭되지 않겠죠. 예를 들어 보면 좀 더 이해가 쉬울 것입니다.
\d+(?!원)
이렇게 쓰게 되면 뒤에 원이 붙어 있지 않은 숫자들만 보이게 됩니다.
부정형 후방탐색(Negative lookbehind) - (?<!)
부정형 후방탐색도 후방탐색과 유사합니다. 똑같이 부정형이 붙어있다는 것이 포인트이죠.
부정형을 단순하게 말하면 없어야한다는 의미이죠.
부정형 후방탐색의 키는 바로 ?<!입니다.
아까 예를 들은 "$+숫자"을 다시 예로 들어보자면, "$ + 숫자"가 없는 것만 탐색되게 됩니다.
$100 라면 $가 붙어있는 숫자 1은 매칭되지 않겠죠. 예를 들어 보면 좀 더 이해가 쉬울 것입니다.
(?<!\$)\d+
이렇게 쓰게 되면 앞에 $가 붙어 있지 않은 숫자들만 보이게 됩니다.
'다양한 TIP' 카테고리의 다른 글
mariadb table create문 확인하기(show create table) (0) | 2022.11.01 |
---|---|
정부24 코로나 생활지원금 신청시 인증서 오류 (0) | 2022.10.14 |
이미지 최적화를 통한 상위노출, 블로그 페이지를 빨리 로딩하기 (0) | 2022.10.05 |
댓글