정규표현식의 세 가지 실전 활용 분야
정규표현식은 실제로 세 가지 작업에 쓰입니다:
- 검증: 텍스트가 형식에 맞는지 판단 (예: 이메일, 휴대폰 번호)
- 추출: 텍스트에서 패턴에 맞는 내용 찾기 (예: 모든 URL, 모든 금액)
- 교체: 패턴에 맞는 부분을 다른 것으로 바꾸기 (예: 날짜 형식 통일, 휴대폰 번호 마스킹)
아래에 실제 사례로 보여드립니다.
검증 사례
휴대폰 번호 검증
정규식: ^1[3-9]\d{9}$
요점: ^ 와 $ 로 앞뒤를 고정하여 전체 문자열이 휴대폰 번호인지 확인합니다. 두 번째 자리를 3~9로 제한하는 것은 현재 번호 할당 규칙입니다.
이메일 검증
정규식: ^[\w.-]+@[\w.-]+.\w+$
요점: 간소화 버전으로 충분합니다. 엄격한 이메일 정규식은 매우 복잡합니다. 실제 프로젝트에서는 간소화 버전 + 인증 메일 발송으로 이중 보장합니다.
주민등록번호 검증
정규식: ^\d{17}[\dXx]$
요점: 18자리, 앞 17자리는 숫자, 마지막 자리는 숫자 또는 X입니다. 이것은 형식만 검증하고 체크섬은 검증하지 않습니다.
URL 검증
정규식: ^https?://[\w.-]+
요점: http 또는 https로 시작하고 도메인이 이어집니다. 간소화 버전이며, 완전한 URL 정규식은 매우 복잡합니다.
추출 사례
모든 휴대폰 번호 추출
정규식: 1[3-9]\d{9}
^ 와 $ 없이, 텍스트에서 모든 휴대폰 번호를 찾습니다. 전역 매칭(g 플래그)을 사용합니다.
모든 URL 추출
정규식: https?://[\w./?=&%-]+
http(s)로 시작하는 URL을 매칭합니다. 실제 URL 문자는 더 복잡하므로 필요에 따라 문자 집합을 조정하세요.
모든 금액 추출
정규식: [¥$]\d+(?:.\d+)?
¥ 또는 $로 시작하는 금액을 매칭하며, 소수점은 선택입니다. 예: ¥100, $99.9.
HTML 태그 내용 추출
정규식: <a[^>]*>([^<]+)
a 태그 안의 텍스트를 추출합니다. 괄호 그룹이 텍스트 내용을 캡처합니다. 이런 정규식으로 HTML을 처리하는 것은 견고하지 않으며, 복잡한 HTML은 파서를 사용하는 것이 더 안정적입니다.
교체 사례
휴대폰 번호 마스킹
가운데 4자리를 별표로 교체: 1[3-9]\d{9} 를 앞 3자리 뒤 4자리만 유지하도록 교체합니다.
실제로는 캡처 그룹을 사용: 정규식 (1[3-9]\d)\d{4}(\d{4}), 교체 후 1\1****\2. \1 과 \2 로 그룹을 참조합니다.
날짜 형식 통일
2026/07/12 를 2026-07-12 로 변환: 정규식 (\d{4})/(\d{2})/(\d{2}), 교체 후 \1-\2-\3.
불필요한 공백 제거
연속된 여러 공백을 하나로: 정규식 \s+, 교체 후 단일 공백.
HTML 태그 삭제
모든 HTML 태그를 제거하고 텍스트만 남기기: 정규식 <[^>]+>, 교체 후 빈 문자열. 태그 속성 안의 > 등이 손실될 수 있으므로, 복잡한 상황에서는 파서를 사용하세요.
디버깅 팁
테스트 도구로 단계별 검증
정규식 테스트 도구를 사용:
- 정규식 입력
- 테스트 텍스트 입력 (매칭되어야 할 것과 매칭되지 않아야 할 것 포함)
- 하이라이트 매칭 결과 확인
- 결과가 올바를 때까지 정규식 점진적 조정
먼저 매칭하고 최적화
먼저 매칭되는 정규식을 작성한 후, 최적화(성능, 정확도)를 고려합니다. 처음부터 완벽을 추구하지 마세요.
온라인 정규식 시각화 활용
복잡한 정규식은 시각화 도구로 구조를 분해하여 각 부분의 의미를 파악하세요.
경계 케이스 주의
- 빈 문자열
- 부분만 매칭되는 문자열
- 특수 문자가 포함된 문자열
- 매우 긴 문자열
재사용 가능한 정규 패턴
중국어
[\u4e00-\u9fa5]+
우편번호
^\d{6}$
QQ 번호
^[1-9]\d{4,10}$
16진수 색상
^#[0-9a-fA-F]{6}$
버전 번호
^\d+.\d+.\d+$
흔한 함정
탐욕적 매칭
.* 는 너무 많이 매칭합니다. 태그 내용 추출 시 .* 대신 [^<]+ 를 사용하여 태그 간 매칭을 방지하세요.
특수 문자 이스케이프 누락
점, 별표, 물음표 등 메타 문자를 매칭하려면 이스케이프해야 합니다. 백슬래시 자체를 매칭하려면 \ 라고 써야 합니다.
여러 줄 매칭
기본적으로 . 는 줄바꿈을 매칭하지 않습니다. 여러 줄 텍스트를 처리하려면 단일 행 모드를 활성화하거나 [\s\S] 로 임의의 문자를 매칭하세요.
성능 문제
catastrophic backtracking(재앙적 역추적): (a+)+ 같은 중첩 수량자는 특정 입력에서 매우 느려집니다. 복잡한 정규식은 성능에 주의하고, 매우 긴 텍스트는 먼저 자르고 매칭하세요.
요약
정규식 실전은 검증, 추출, 교체 세 가지입니다. 검증은 ^ $ 로 고정, 추출은 전역 매칭, 교체는 캡처 그룹 참조를 사용합니다. 정규식을 작성할 때 먼저 도구로 테스트하고 검증한 뒤 최적화하세요. 몇 가지 자주 쓰는 패턴(휴대폰 번호, 이메일, 날짜, URL)을 기억해 두면 일상적으로 충분합니다. DocsAll 정규식 테스트 도구는 브라우저에서 실행되어, 쓰면서 바로 테스트할 수 있고 텍스트가 업로드되지 않습니다.