ISO 8601 — canonical 포맷
포맷 통제할 때 항상 YYYY-MM-DD 와 ISO 8601 타임스탬프 선호. 정규식이 trivial:
- 날짜:
\d{4}-\d{2}-\d{2} - 시간:
\d{2}:\d{2}:\d{2} - 날짜시간:
\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?
흔한 모호한 포맷
05/04/2026: 5월 4일 (US) 인가 4월 5일 (대부분 세계) 인가? 정규식이 못 알려줘. 모호한 포맷 받지 마. ISO 8601 강제, 또는 명시적으로 여러 모호하지 않은 포맷 받기.
꼭 다양한 포맷 파싱해야 한다면 패턴 여러 개 작성 후 순서대로 시도:
1. ISO: \d{4}-\d{2}-\d{2}
2. US 슬래시: \d{1,2}/\d{1,2}/\d{4}
3. EU 점: \d{1,2}\.\d{1,2}\.\d{4}
4. Long: (Jan|Feb|...)\s+\d{1,2},?\s+\d{4}
검증 vs 파싱
정규식이 모양 매칭 알려줘. 날짜가 진짜인지 안 알려줘. 2026-02-30 가 패턴 매칭하지만 2월 30일 존재 X. 진짜 검증: Python 의 datetime.strptime(s, fmt), JS 의 new Date(s) (그 다음 !isNaN 체크), Go 의 time.Parse.
산문에서 날짜 추출
"이 단락의 날짜 찾기" 면 anchor 된 alternation: \b(\d{4}-\d{2}-\d{2}|\d{1,2}/\d{1,2}/\d{4})\b. 보수적으로 — 날짜 추출의 false positive 흔함.