본문 바로가기
Language/Java

[Java] 정규식 정리 (Regular Expression)

by 1000zoo 2023. 9. 21.

정규식 이란?

정규식이란 텍스트 데이터 중에서 원하는 조건과 일치하는 문자열을 찾아내기 위해 사용하는 것으로
미리 정의된 기호와 문자를 이용해서 작성한 문자열을 말한다.

사용

  • 많은 양의 텍스트 파일 중에서 원하는 데이터를 뽑아낼 수 있다.
  • 입력된 데이터가 형식에 맞는 지 확인할 수 있다.
  • 문자열을 원하는 기준에 맞게 배열로 만들 수 있다. (split)
  • 문자열 중 특정 형식을 원하는 문자열로 변경할 수 있다. (replaceAll)

정규식 패턴

문자 (Character Classes)

주의: 아래의 패턴은 하나당 하나의 글자를 의미한다.
패턴 설명
. 모든 문자 (알파벳, 숫자 뿐 아니라 유니코드로 존재하는 모든 문자)
\\w
[a-zA-Z0-9]
영숫자 (alphanumeric)만 허용
\\W
[^a-zA-Z0-9]
영숫자가 아닌 경우에만 허용
\\d
[0-9]
숫자만 허용
\\D
[^0-9]
숫자가 아닌 경우만 허용
\\s 공백 문자, 탭만 허용
\\S 공백, 탭이 아닌 경우만 허용
[ㄱ-ㅎ가-힣] 한글 만 허용
[^ㄱ-ㅎ가-힣] 한글이 아닌 경우에만 허용

어설션 (Assertion)

패턴 설명
^ 문장의 시작이 뒤의 패턴인지
$ 문장의 끝이 바로 앞의 패턴인지
^[reg]*$ 패턴 (reg) 로만 이루어진 문자열인지

수량자 (Quantifiers)

패턴 설명
? 앞의 패턴이 최대 한 개 인지
* 앞의 패턴이 0개 이상
+ 앞의 패턴이 한 개 이상
{n} n 개
{min, } 최소 min 개
{min, max} 최소 min, 최대 max 개

그룹

패턴 설명
[] 괄호 안의 문자 포함
[^] 괄호 안의 문자 포함 X
[reg1|reg2] reg1 또는 reg2 포함

패턴 조합 (예시)

아래의 문자열 배열들을 아래의 표와 같이 분류할 수 있다.

전체 코드

 

String[] data = {
        "a", "A", "c", "3", "f",
        "a2", "A1", "a!",
        "cat1", "a123", "a1234", "abc123", "abc!as", "dog!!cat",
        "123", "!g", "abc", "Abc", "coat", "cow", "c#", "boat", "dog",
        "강아지", "안녕하세요."
};
String[] patterns = {
        "[a-z]", "[c-z]", "[a-zA-Z]", "\\w", "[cf]",
        "[a-z][0-9]", "[a-zA-Z][0-9]", "\\w\\W", "c\\W", "[a-z]+",
        "[a-z]+\\d+", "[a-z]{1}\\d+", "[a-z]+\\d{2,3}", "\\w*[\\W]{1}\\w*", ".*\\W+.*",
        ".*", "c.*", "^[a-z]*$", "^[a-zA-Z]*$", "c[a-z].*", "[bd].*", "^[bd][\\w]*$",
        "^[ㄱ-ㅎ가-힣]*$", "^[ㄱ-ㅎ가-힣\\W]*$"
};

설명에 편의상 \\W 를 특수문자라 했지만, 사실은 영숫자가 아닌 모든 문자이다.

패턴 설명 결과
[a-z] 소문자인 한 글자인지 확인 a, c, f
[c-z] c-z 사이의 알파벳인지 확인 c, f
[a-zA-Z] 소문자나 대문자인 한 글자인지 확인 a, A, c, f
\\w 영숫자 인지 확인 a, A, c, 3, f
[cf] c 혹은 f 인지 확인 c, f
[a-z][0-9] 소문자+숫자 조합인지 확인 (두 글자) a2
[a-zA-Z][0-9] 알파벳+숫자 조합인지 확인 (두 글자) a2, A1
\\w\\W 영숫자+특수문자 인지 확인 a!, c#
c\\W c+특수문자 인지 확인 c#
[a-z]+ 소문자만 최소 한 개 이상인지 확인 a, c, f, abc, coat, cow, boat, dog
[a-z]+\\d+ 소문자가 최소 한 개 이상 들어오고, 뒤에 숫자가 최소 하나 나오는 지 확인 a2, cat1, a123, a1234, abc123
[a-z]{1}\\d+ 소문자가 한 개, 뒤에 숫자가 최소 하나 나오는 지 확인 a2, a123, a1234
[a-z]+\\d{2,3} 소문자 최소 하나, 숫자 최소 2, 최대 3개 인지 확인 a123, abc123
\\w*[\\W]{1}\\w* 문자열 내에 특수문자가 딱 하나만 있는 지 확인 a!, abc!as, !g, c#
.*\\W+.* 문자열 내에 특수문자가 하나 이상있는 지 확인 a!, abc!as, dog!!cat, !g, c#, 강아지, 안녕하세요.
.* 모든 문자열 모든 문자열
c.* c 로 시작하는 모든 문자열 c, cat1, coat, cow, c#
^[a-z]*$ 소문자로만 이루어진 문자열인 지 확인 a, c, f, abc, coat, cow, boat, dog
^[a-zA-Z]*$ 알파벳으로만 이루어진 문자열인 지 확인 a, A, c, f, abc, Abc, coat, cow, boat, dog
c[a-z].* c + 알파벳 으로 시작하는 문자열인 지 확인 cat1, coat, cow
[bd].* b or d 로 시작하는 문자열인 지 확인 dog!!cat, boat, dog
^[bd][\\w]*$ b or d 로 시작하고 영숫자만 있는 지 확인 boat, dog
^[ㄱ-ㅎ가-힣]*$ 한글만 있는 지 확인 강아지
^[ㄱ-ㅎ가-힣\W]*$ 한글과 특수문자만 있는 지 확인 강아지, 안녕하세요.

'Language > Java' 카테고리의 다른 글

[Java] Functional Interface  (0) 2023.10.24
[Java] Google Java Style Guide 번역  (0) 2023.10.17
[Java] JDK Java version 변경하기 (M1)  (0) 2023.09.25
[Java] List<int[]> 를 int[][] 로 변환  (0) 2023.09.06
[Java] Deque 알아보기  (0) 2023.09.04