문자 밀도가 문제야
정규식이 무서워 보이는 건 정보 밀도 때문이야. ^(?:[a-zA-Z0-9_'^&/+-])+(?:\.(?:[a-zA-Z0-9_'^&/+-])+)*@(?:(?:\[?(?:[0-9]{1,3}\.){3}[0-9]{1,3}\]?)|(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,})$ 같은 패턴은 프로그래밍 어떤 문법보다도 인치당 의미가 빽빽해. 눈이 파싱을 거부해.
이건 진짜 인지 한계야, 개인 결함이 아니라. 두 가지 기법이 해결해.
1. Verbose / extended 모드
대부분 엔진이 패턴을 여러 줄에 펼치고 주석 다는 플래그 지원해. Python 은 re.VERBOSE (또는 re.X). PCRE 는 x 플래그.
갑자기 같은 패턴이 평범한 코드처럼 읽혀. 패턴 안의 공백은 무시 (literal 공백 필요하면 \ 또는 [ ] 사용); # 가 주석 시작.
2. 조각으로 빌드, 조각에 이름 붙이기
verbose 모드 없이도 named building block 으로 패턴 조립 가능. 실제 코드베이스의 production 정규식이 이렇게 생겼어.
마인드셋 전환
정규식은 write-once 가 아냐. *반복해서 읽혀*. 미래의 본인이 고마워할 버전은 80 컬럼에 욱여넣은 거 말고 공백, 주석, named group 박힌 거야. 다음 사람을 위해 써 — 다음 사람이 2주 뒤의 본인이라도.