정규표현식 메타문자의 성능 우선순위가 있느냐는 질문을 받았다. 일단 메타문자는 검사 범위의 차이를 가지고 있을 뿐, 성능 차이는 없다. 하지만 성능 우열을 결정할 수는 있다. 기준은 내가 찾으려는 문자열의 위치.
수량자는 최대 검사모드가 디폴트이기 때문에 .*은 입력 순간 모든 문자를 검사한다. 이후 종료 문자인 b를 찾아야 하는데 b의 위치는 뒤에서 두 번째이므로 한 단계만 뒤로 후퇴하면 끝.
b의 위치가 바뀌면?
같은 정규표현식임에도 .*으로 모든 문자를 검사한 상태에서 앞부분에 위치한 b를 찾기 위해 수백 단계의 후퇴 과정이 발생한다.
수량자 최소 검사모드
*?는 최소 검사모드이기 때문에 앞에서부터 하나씩 검사한다. 결과적으로 뒤에서 두 번째 위치하는 b를 찾기 위해 수백 단계의 검사 과정 발생.
그래서 b가 앞부분에 있을 때는 검사가 순식간에 끝난다.
정규표현식을 잘 쓰고 싶다면 정규표현식이 아닌 데이터에 집중해야 한다.
- 정규표현식 3원칙
- 검사 대상 문자열에 대한 충분한 이해
- 뚜렷한 검사 목적
- 정규표현식에 대한 충분한 이해
이 책이 끝날 때까지 이 3원칙, 특히 대상 문자열에 대한 이해의 중요성을 지겹게 강조하는 나를 만나게 될 것이다. - 데이터 분석이 쉬워지는 정규표현식 (57페이지)
댓글 없음:
댓글 쓰기