티스토리 뷰
정규표현식 Regular Expression, Regex
- 문자열을 처리하기 위한 패턴 기반 문자열(식)
- 정규표현식으로 처리할 문자열 패턴을 지정하고 특정 클래스 등을 사용해 정규표현식에 해당하는지 체크한다.
- 개발 뿐 아니라 네트워크, 웹 등에서 공용으로 사용 가능한 표준 표현 방법
- 패스워드 유효성 검사나 전화번호, 이메일 양식 검사 등(Validation Check 라고 함)에서 사용된다.
메타 문자 Meta Character
- 정규표현식에 사용되는 패턴 문자
[ 일반적인 기호 ]
1. ^x: x로 시작하는 문자열
- "x", "xa", "xxx" 패턴 규칙에 부합되어 사용 가능한 문자열이다.
- x가 숫자라는 의미일 때: "숫자admin", "숫자123" 사용 가능, "admin123" 불가능
2. x$ : x로 끝나는 문자열
- "x", "ax", "xxx", "abcx" 사용 가능
- "xy", "yyy", "xab" 사용 불가능
만약, x로 시작해서 x로 끝나는 문자열일 경우
- ^x$ : "x" 가능 // "xy", "x1", "ax" 불가능
3. .x : x 앞에 1개의 문자가 포함되는 문자열
- "ax", "bx", "abxy" 사용 가능
- "xa", "xb" 사용불가능
4. x+ : x가 1번 이상 반복되는 문자열
- "x", "xx", "xxx", "xaxx"
5. x* : x가 0번 이상 반복되는 문자열
- " ", "a", "x", "xxx"
- 주로 다른 패턴과 결합하여 사용한다.
6. x? : x가 나올 수도 있고, 나오지 않을 수도 있는 문자열
- "x", "", "a"
- 주로 다른 패턴과 결합하여 사용한다.
7. x|y : x 또는 y가 포함되는 문자열
- "x", "y", "xy"
xa?y$ 일 경우,
시작되는 문자 상관 없음, 문자열 내에서 x가 앞에 오고 x뒤의 문자가 a가 올 수도 있고, 안 올 수도 있으며 반드시 마지막 y로 끝나는 문자열
"xy" - x로 시작하고 a는 없지만 y로 끝나는 문자열 (사용 가능)
"hixy" - x 앞의 문자열 무관, x 뒤에 문자가 y로 끝나는 문자열 (사용 가능)
"pixzy" - x 앞 문자열 무관, x 뒤 문자가 a 또는 y가 아니므로 사용 불가
"xyz" - y로 끝나지 않으므로 사용 불가
x|a?y$ 일 경우,
시작되는 문자 상관 없음, 문자열에 x가 포함되거나 a?y$가 포함된 문자열
- "xy", "hixy", "hixay", "ay" 사용 가능 // "ay1" 사용 불가
[ 괄호 문자 ]
1. (xy) : 소괄호 안의 내용 (xy)이 그대로 포함된 문자열로 괄호 안의 문자열을 그룹화 시킨다.
- "xy", "axy" 사용 가능 // "yx" 사용 불가
2. x{n} : x가 n번만큼 반복되는 문자열 (정확히 n번)
- x{3} : x가 3번 반복 - "xxx", "axxxbax" 사용 가능 // "asdxxxxxds" 사용 불가
3. x{n, } : x가 n번 이상 반복되는 문자열
- x{3, } : x가 3번 이상 반복 - "xxxxx"
4. x{n,m} : x가 n번 이상, m번 이하만큼 반복되는 문자열
- x{2,4} : x가 2번 이상 4번 이하 반복 - "xx", "xxx", "xxxx" 사용 가능 // "x", "xxxxx" 사용 불가
5. [ ] 대괄호는 괄호 내 구성요소를 확인하는 용도로 사용한다. (대괄호 안의 내용 중 한 글자)
- [x] : x가 포함되는 문자 1개
- [^x] : x가 포함되지 않는 문자 1개로 ^기호를 대괄호 안에 사용할 경우, 부정의 의미로 사용된다.
- [x-y] : x 부터 y 까지의 문자 중 1개
- [A-Z] : 대문자 A부터 대문자 Z까지 중 1개의 문자가 오면 된다.
- [a-z] : 소문자 a부터 소문자 z까지 중 1개의 문자가 오면 된다.
- [0-9] : 숫자 1개
- [가-힣] : 한글 1개 문자
=> 주로 중괄호(반복 지정) 조합으로 많이 사용된다.
[가-힣]{2,5} : 한글 2글자에서 5글자 사이 => 주로 한글 이름 확인에 사용된다.
[A-Za-z]{2,8} : 영문자(대문자 또는 소문자) 2글자에서 8글자 사이
[A-Za-z0-9]{4,16} : 영문자 또는 숫자 4~ 16글자 사이
a{1}b{2}c{2,4}
a가 1번, b가 2번, c가 2번 이상 4번 이하 반복되는 문자열
- "abbcc", "abbccc", "abbcccc" 사용 가능
- "abbc", "aabbccc" 사용 불가
(a1){2}b{2,3}c{2, }
a1 그룹이 2번, b가 2번 이상 3번 이하, c가 2번 이상 반복되는 문자열
- "a1a1bbccc", "a1a1bbbcccccccccccccc" 사용 가능
- "a1bbccc", "a1a1bbbc" 사용 불가
[ 예외 문자 ]
자바 이스케이프 문자(\n) 같은 특정 기능을 수행하는 역할
\^ | ^ 기호 패턴으로 인식하지 않고, 일반 문자로 인식 |
\d | 숫자라는 뜻으로 [0-9]와 동일 |
\D | 숫자가 아닌 것 |
\s | 공백 문자 |
\S | 공백이 아닌 것 |
\w | 영단어 구성요소 (알파벳, 숫자) |
\W | 영단어 구성요소 아닌 것 |
정규표현식 예
1. 한글 이름 (2글자 ~ 5글자) : ^[가-힣]{2,5}$
2. 휴대폰 번호 : ^(010|011)[-/s]?\d{3,4}[-\s]?\d{4}$
- ^(010|011) : 010 또는 011로 시작
- [-\s]? : -기호 또는 공백이 포함될 수도 있고, 포함되지 않을 수도 있음
- \d{3,4} : 숫자가 3자리 또는 4자리
- \d{4}$ : 숫자 4자리로 끝나야함
* 주의!
패턴에 사용되는 \ 기호 사용 시 문자열 내에서 이스케이프 문자로 인식되므로 반드시 \\ 형태로 사용해야만 패턴 문자열로 인식한다.
String regex = "^(010|011)[-\\s]?\\d{3,4}[-\\s]?\\d{4}$";
String phone = "011-123-5678"; // 검사에 사용할 문자열
boolean result = Pattern.matches(regex, phone);
System.out.println(result); // true
'배운 것 기록 > etc' 카테고리의 다른 글
[Python] 자료형 - Set / List / 튜플 / 딕셔너리 (0) | 2022.07.13 |
---|---|
[C++] 포인터 (0) | 2022.07.12 |
정규화 과정 (0) | 2022.07.05 |