수량자를 결합한 실전 패턴
이제 수량자, 문자 클래스, 앵커, 그룹을 함께 쓸 수 있어. 서로 다른 문법을 어떤 경계로 묶는지 살펴보자.
느슨한 HTML/XML 태그 추출
<[^>]+>는 <div>나 <p class="foo">처럼 단순한 태그를 찾아. 실제 HTML을 해석할 때는 파서를 써야 하고, 이 패턴은 일회성 추출에만 적합해.
따옴표 문자열
"[^"]*"는 첫 닫는 따옴표에서 멈추도록 경계를 직접 표현해. 이스케이프된 따옴표까지 처리하려면 "(?:[^"\\]|\\.)*"처럼 백슬래시 이스케이프를 별도 대안으로 받아야 해. 패턴 전체의 안전성은 뒤에 이어지는 토큰까지 함께 판단해.
부호와 소수부가 선택적인 숫자
-?\d+(\.\d+)?는 선택적 마이너스, 하나 이상의 숫자, 선택적 소수부로 이루어져. 점과 뒤 숫자를 한 그룹으로 묶어야 소수부 전체가 함께 선택적으로 바뀌어.
수량자 확인 목록
- 바로 앞 조각이 필수라면
+, 선택적이라면*가 맞는가? .*보다 경계를 직접 표현한 문자 클래스가 더 알맞은가?{n,m}안에 불필요한 공백이 없는가?\b나^...$처럼 필요한 경계를 붙였는가?- 빈 입력과 아주 긴 입력으로도 시험했는가?
이 다섯 질문만 확인해도 흔한 수량자 버그 대부분을 걸러낼 수 있어.