더북(TheBook)

그럼 이제 앞에서 살펴본 정규표현식 코드로 돌아가서, 각 정규표현식이 어떤 의미를 가지는지 분석해보겠습니다.

 

▲ 그림 4-3 정규표현식으로 가지고 오는 문자열 내용 정리

맨 처음의 0은 말 그대로 숫자 0을 찾습니다. 그다음 \d{1,2}는 0 다음 숫자 1개 또는 2개를 탐색합니다. [ -]?은 공백 또는 하이픈이 존재할 수도 있고, 존재하지 않을 수도 있음을 의미합니다(?를 넣지 않아도 됩니다). \d{3,4}는 숫자 3개 또는 4개를 탐색합니다. 나머지는 동일한 규칙의 반복입니다.

이런 식으로 적절한 정규표현식을 사용하면 문자열을 전처리하는 과정이 대폭 줄어들어 문자열 조작에 대한 걱정을 깨끗이 지워버릴 수 있습니다. 앞에서 풀었던 문제 모두 정규표현식으로 작성하면 코드를 매우 짧게 만들면서 똑같은 정답이 나오므로 시간이 된다면 나중에 연습해보세요.

잠깐만요

정규표현식의 시간 복잡도는 어느 정도일까요?

결론부터 말하자면 어떤 형태로 정의하기가 매우 힘듭니다. 정규표현식을 사용한다는 것은 엄연히 문자열을 검색하는 과정이지만 사용한 정규표현식에 따라 O(1)이 될 수도 있고 O(2n)이 되는 등 천차만별이기 때문에 문자열 검색이 얼마나 복잡한지에 따라서 결정된다고 보면 됩니다.

따라서 복잡한 정규표현식을 사용하면 시간 복잡도가 증가하여 자신도 모르는 사이에 검색 비용이 엄청나게 늘어나 제한 시간 내에 실행하지 못하는 경우도 있습니다. 정규표현식으로도 감당하기 힘든 문자열은 보통 아예 일정 부위를 자르거나 추출해서 사용하는 등의 더 섬세한 전처리가 필요하므로 정규표현식만으로 모든 것을 해결하기 어렵다는 사실을 기억해주세요.

정규표현식을 어느 정도 이해했다면 본격적으로 문제를 풀어보겠습니다. 분명 정규표현식을 모두 외웠다고 하더라도 처음에는 감이 오지 않을 겁니다. 천천히 검색하고 싶은 문자를 분리해가면서 결과를 합친다는 생각으로 진행해봅시다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.