정규식 이란?
정규식이란 텍스트 데이터 중에서 원하는 조건과 일치하는 문자열을 찾아내기 위해 사용하는 것으로
미리 정의된 기호와 문자를 이용해서 작성한 문자열을 말한다.
사용
- 많은 양의 텍스트 파일 중에서 원하는 데이터를 뽑아낼 수 있다.
- 입력된 데이터가 형식에 맞는 지 확인할 수 있다.
- 문자열을 원하는 기준에 맞게 배열로 만들 수 있다. (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 |