abcba 같은 팰린드롬(앞뒤가 같은 문자열)을 정규표현식으로 검사할 수 있을까?
재귀 패턴이 필요
PCRE에서는 재귀 패턴으로 가능하다. ^((.)(?1)?2|.?)$ 이런 식. 하지만 대부분의 엔진에서는 지원 안 한다.
JavaScript에서는
정규표현식으로 일반적인 팰린드롬 검사는 못 한다. 코드로 앞뒤 비교하는 게 맞다. 정규표현식 테스터에서 지원하는 엔진 확인 후 시도해보자.
고정 길이는 가능
5글자 팰린드롬이면 ^(.)(.)(.)21$ 로 검사 가능. 길이 알면 패턴 짤 수 있다. 테스터로 특정 길이 팰린드롬을 테스트해보자.
코드 리뷰 체크리스트
정규표현식을 코드 리뷰할 때 확인할 것들: 1) 특수문자 이스케이프가 제대로 됐는지, 2) 앵커(^, $)가 필요한지, 3) 탐욕적/게으른 매칭이 맞는지, 4) 테스트 케이스가 있는지. 정규표현식 테스터로 검증했는지 물어보자.
버전 관리와 변경 이력
정규표현식을 변경하면 기존에 잘 동작하던 것이 깨질 수 있다. 변경 사유와 테스트 결과를 커밋 메시지에 남기면 나중에 추적하기 좋다.
결론
정규표현식은 강력하지만 양날의 검이다. 잘 쓰면 코드가 간결해지고, 잘못 쓰면 유지보수 악몽이 된다. 테스터로 충분히 검증하고, 문서화하고, 테스트 코드를 작성하자. 그게 건강한 정규표현식 사용법이다.
정규표현식 테스터에서 실시간으로 패턴을 테스트하고 결과를 확인하면서 학습하면 정규표현식 실력이 빠르게 늘어난다.