예시
URL
호스트 이름, 포트 번호, 경로로 이루어진 URL을 일치시킵니다.
정규 표현식:
https?:\/\/[-\w.]+(:\d+)?(\/([\w\/_.]*)?)?
https?:\/\/[-\w.]+(:\d+)?(\/([\w\/_.]*)?)?
완전한 URL
위 정규 표현식보다 완전하지만 느린 패턴입니다. 질의 문자열과 사용자 정보가 포함된 URL을 일치시킵니다.
정규 표현식:
https?:\/\/(\w*:\w*@)?[-\w.]+(:\d+)?(\/([\w\/_.]*(\?\S+)?)?)?
https?:\/\/(\w*:\w*@)?[-\w.]+(:\d+)?(\/([\w\/_.]*(\?\S+)?)?)?
(\w*:\w*@)
은 사용자 이름과 암호가 포함된 경우를 처리합니다. (\?\S+)
는 질의 문자열을 처리합니다.
이메일 주소
정규 표현식:
(\w+\.)*\w+@(\w+\.)+[A-Za-z]+
(\w+\.)*\w+@(\w+\.)+[A-Za-z]+
이 패턴으로는 올바른 형식을 한 이메일 주소를 모두 검증할 수 없습니다.
예를 들어 이 패턴은 잘못된 이메일 주소인 ben..forta@forta.com
을 일치시킵니다. 그리고 호스트 이름에 IP 주소가 들어가는 올바른 이메일 주소를 불일치시킵니다.
그래도 대다수의 이메일 주소를 검사하는 것이 가능합니다.
신용카드 번호
신용카드에는 모두 간단한 숫자 매김 체계가 있는데, 몇 자리 특정 숫자를 필두로 나머지 숫자들이 따라옵니다.
마스터카드
16자리 숫자이고 첫 숫자는 항상 5이며, 두 번째 숫자는 1에서 5 사이입니다.
정규 표현식:
5[1-5]\d{14}
5[1-5]\d{14}
비자
4로 시작하고 13 자리나 16 자리 숫자로 이루어집니다.
정규 표현식:
4\d{12}(\d{3})?
4\d{12}(\d{3})?
아메리칸익스프레스
15 자리 숫자이고 34나 37로 시작합니다.
정규 표현식:
3[47]\d{13}
3[47]\d{13}
디스커버
18 자리 숫자이고 6011로 시작합니다.
정규 표현식:
6011\d{14}
6011\d{14}
다이너스클럽
14 자리 숫자로 300에서 305 사이 혹은 36이나 38로 시작합니다.
정규 표현식:
(30[0-5]|36\d|38\d)\d{11}
(30[0-5]|36\d|38\d)\d{11}
모두 포함하기
앞의 카드 번호 패턴들을 모두 포함하면 다음과 같습니다.
(5[1-5]\d{14})|(4\d{12}(\d{3})?)|(3[47]\d{13})|(6011\d{14})|((30[0-5]|36\d|38\d)\d{11})
(5[1-5]\d{14})|(4\d{12}(\d{3})?)|(3[47]\d{13})|(6011\d{14})|((30[0-5]|36\d|38\d)\d{11})
이 예시는 신용카드 번호가 시작하는 숫자와 길이가 맞는지를 확인하는 패턴입니다.
신용카드 번호가 정말로 유효한지는 모드 10(Mod 10)이라고 알려진 공식을 사용해야 합니다. 룬 알고리즘으로도 부르는 이 공식은 위키피디아에서 확인할 수 있습니다.
주민등록번호
전체 자릿수, 날짜 형식, 성별 숫자가 유효한 주민등록번호를 일치시킵니다.
\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])-[1-4]\d{6}
\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])-[1-4]\d{6}
이 패턴의 한계는 날짜 형식이 완벽하지 않다는 점, 성별 숫자가 연도와 상관없다는 점입니다.
참고로 주민등록번호의 맨 뒷자리 숫자는 고유한 알고리즘으로 주민등록번호가 유효한지 확인합니다.
미국식 날짜 형식을 국제표준 날짜 형식으로 바꾸기
mm/dd/yyyy
날짜 형식을 yyyy-mm-dd
형식으로 변환해 보겠습니다.
정규 표현식:
([\d]{2})\/([\d]{2})\/([\d]{4})
([\d]{2})\/([\d]{2})\/([\d]{4})
치환 표현식:
$3-$1-$2
$3-$1-$2
정규 표현식의 한글과 유니코드
한글 일치시키기
한글은 \w
에 포함되지 않는다는 것을 주의해야 합니다.
예시로 점수 구간 '수우미양가'를 찾는다고 가정해 보겠습니다.
예문:
국어: 수영어: 수수학: 수미술: 양체육: 가
국어: 수영어: 수수학: 수미술: 양체육: 가
정규 표현식:
수|우|미|양|가
수|우|미|양|가
[수우미양가]
가 아닌 수|우|미|양|가
인 것을 주목할 필요가 있습니다. 한글처럼 2 바이트 이상으로 이루어진 문자는 집합에서 제대로 인식이 안 되는 경우가 많습니다.
정규 표현식:
\b(수|우|미|양|가)\b
\b(수|우|미|양|가)\b
\b
는 영단어의 경계만 나타내므로 위 정규 표현식은 의도대로 작동하지 않습니다.
대신 다음과 같이 전후방탐색을 이용할 수 있습니다.
정규 표현식:
(?<=\s)(수|우|미|양|가)(?=\s)
(?<=\s)(수|우|미|양|가)(?=\s)
만약 과목과 점수 사이에 공백이 없다면 다음 정규 표현식을 이용할 수 있습니다.
예문:
국어:수영어:수수학:수미술:양체육:가
국어:수영어:수수학:수미술:양체육:가
정규 표현식:
(?<=[^가-힣])(수|우|미|양|가)(?=[^가-힣])
(?<=[^가-힣])(수|우|미|양|가)(?=[^가-힣])
유니코드의 한글 문자 집합의 첫 번째 문자는 '가'이고 마지막 문자는 '힣'이기 때문에 [가-힣]
로 한글 문자 집합을 표현할 수 있습니다.
유니코드 일치시키기
저작권 표시 ⓒ
와 같은 기호를 정규 표현식으로 표현하려면 유니코드 번호(Unicode code point)를 이용합니다.
정규 표현식:
`\u00a9`
`\u00a9`