코드 리뷰할 때 자주 보이는 정규표현식 관련 실수들을 정리했다.
이스케이프 누락
점(.)을 문자 그대로 찾으려고 .을 썼는데 아무 문자나 매칭되는 문제. .로 이스케이프해야 한다. 정규표현식 테스터에서 확인하는 습관을 들이자.
앵커 미사용
전체 문자열이 패턴과 일치하는지 보려고 했는데 ^와 $를 안 붙여서 부분 매칭이 되는 경우.
탐욕적 매칭 문제
.* 로 원하는 것보다 너무 많이 잡히는 경우. .*? 게으른 매칭이나 부정 문자 클래스 [^x]* 를 쓰자. 테스터로 예상대로 동작하는지 꼭 확인하고 커밋하자.
에러 처리 고려하기
잘못된 정규표현식은 런타임 에러를 일으킬 수 있다. 동적으로 패턴을 만들 때는 try-catch로 감싸거나 미리 검증하자. 정규표현식 테스터에서 문법 오류를 미리 확인할 수 있다.
유니코드 처리
한글이나 이모지 같은 유니코드 문자를 처리할 때는 u 플래그가 필요할 수 있다. 다국어 지원이 필요하면 유니코드 문자 클래스를 활용하자.
보안 측면에서
사용자 입력으로 정규표현식을 만들면 ReDoS 공격에 취약할 수 있다. 신뢰할 수 없는 입력을 패턴으로 쓰지 말고, 꼭 필요하면 타임아웃을 설정하자. 테스터로 다양한 입력에 대한 동작을 확인하고 안전하게 사용하자.
복잡한 문자열 처리가 필요할 때 gimo.kr 정규표현식 테스터를 활용하면 패턴 작성과 검증이 훨씬 수월해진다. 실무에서 자주 쓰이는 패턴들을 익혀두면 생산성이 크게 올라간다.