Skip to content

Lookaround를 이용한 정규 표현식

:
(?<!_)example_keyword(?!_)의 이해

정규 표현식은 단순한 문자열 일치를 넘어서, 텍스트의 맥락(Context) 에 따라 정교하게 검색 조건을 설정할 수 있게 해준다. 그중에서도 Lookaround(룩어라운드) 는 어떤 패턴이 특정 조건 아래에 있을 때만 일치하도록 제어할 수 있는 기능이다.

이 문서에서는 Lookaround의 두 형태인 Lookbehind와 Lookahead를 설명하고, 이를 활용한 예제로 (?<!_)example_keyword(?!_) 같은 패턴을 분석한다.

  1. Lookaround란 무엇인가?

Lookaround는 말 그대로, 우리가 찾으려는 대상 문자열의 “주변을 살펴보는” 역할을 한다. 특징은, 문자열의 일치 조건을 검사하되, 그 주변 문자를 실제로 포함하지는 않는다. 즉, 조건은 체크하지만 매칭 결과에 영향을 주지 않는다.

Lookaround는 네 가지 형태가 있다:

종류설명예시
(?=)긍정형 전방 탐색 (Positive Lookahead)뒤에 특정 패턴이 있는 경우
(?!)부정형 전방 탐색 (Negative Lookahead)뒤에 특정 패턴이 없는 경우
(?<=)긍정형 후방 탐색 (Positive Lookbehind)앞에 특정 패턴이 있는 경우
(?<!)부정형 후방 탐색 (Negative Lookbehind)앞에 특정 패턴이 없는 경우

  1. 실제 예제: (?<!_)example_keyword(?!_)

이제 이 Lookaround 기능이 실제로 어떻게 사용되는지를 살펴보자.

패턴:

(?<!_)example_keyword(?!_)

목적:

example_keyword라는 단어를 찾되, 그 앞뒤에 밑줄(_)이 없는 경우에만 일치시키고 싶을 때 사용한다.

구성 설명: • (?<!_): 이 부분은 부정형 후방 탐색이다. → example_keyword 앞에 밑줄이 있으면 매칭하지 않는다. • example_keyword: 우리가 찾고자 하는 실제 문자열이다. • (?!_): 이 부분은 부정형 전방 탐색이다. → example_keyword 뒤에 밑줄이 있으면 매칭하지 않는다.

이렇게 Lookbehind와 Lookahead를 함께 사용하면, 중심 문자열의 전후 문맥 조건을 동시에 검사할 수 있다.

  1. 예시와 결과

다음 문자열을 생각해보자:

example_keyword
example_keyword
example_keyword

example_keyword

정규 표현식 (?<!_)example_keyword(?!_)를 적용하면, 일치하는 것은 오직 첫 번째 “example_keyword” 뿐이다. 그 외의 경우는 앞이나 뒤에 밑줄이 있으므로 조건에서 제외된다.

  1. 왜 Lookaround가 중요한가?

Lookaround는 다음과 같은 상황에서 큰 도움이 된다: • 정확한 경계 판단이 필요한 경우 예: 어떤 단어가 다른 접두어나 접미어 없이 단독으로 등장했는지 검사할 때 • 불필요한 결과를 필터링하고 싶은 경우 예: 로그 분석 중 특정 키워드를 포함하지만, 특정 조건이 붙은 경우만 제외하고 싶을 때 • 문자열의 일치 범위를 제어하고 싶을 때 예: 특정 단어가 괄호 안에 있는 경우만 찾거나, 괄호 밖인 경우만 찾고 싶을 때

Lookaround는 이러한 요구를 만족시키면서도, 정규식 전체를 깔끔하고 읽기 쉽게 유지해준다.

  1. 주의할 점 • Lookaround는 조건을 “검사”만 하지, 일치 결과에는 포함되지 않는다. 즉, 실제로 추출되는 문자열에는 영향을 주지 않는다. • 일부 오래된 정규식 엔진은 Lookbehind를 지원하지 않는다. 예: JavaScript의 구버전, 일부 텍스트 편집기 등 • 복잡한 Lookaround를 과도하게 중첩하면 성능에 영향을 줄 수 있다. 간결한 패턴 구성이 중요하다.

  1. 요약

Lookaround는 정규 표현식에서 강력한 조건 검사 도구다. 특히 (?<!...)(?!...) 같은 부정형 탐색은 특정 조건을 제외하는 데 유용하다.

패턴 (?<!_)example_keyword(?!_)는, 앞뒤에 밑줄이 없는 경우에만 키워드를 찾고 싶을 때 정확하게 동작한다. 이처럼 Lookaround를 적절히 사용하면, 단순한 문자열 검색을 넘어서 문맥 기반의 정밀한 탐색과 필터링이 가능해진다.