티스토리 뷰

배운 것 기록/etc

정규표현식

키죽 2022. 7. 7. 09:52

정규표현식 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
댓글
최근에 올라온 글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함