Java의 정규 표현식

Hyeonjun·2022년 8월 9일
0


문제를 풀면서 드디어 정규 표현식에 대해 정리할 때가 왔다고 느꼈다.
기왕 블로그도 시작했겠다, 한번 확실하게 정리하고 넘어가보자.

정규 표현식

정규표현식 문법

정규 표현식역할
^문자열의 시작
$문자열의 끝
_.임의의 한 문자
*문자가 0번 이상 발생
+문자가 1번 이상 발생
?문자가 0번 혹은 1번 발생
[ ]문자의 집합 범위를 나타냄
[0-9]숫자만
[a-z]알파벳
[가-힣] 한글 전체
{ }횟수 또는 범위를 의미
{1,4} 1~4회
( )소괄호 안의 문자를 하나의 문자로 인식
group으로 사용
Or
|확장 문자열의 시작
\b단어의 경계
\B단어가 아닌 것의 경계
\A입력의 시작부분
\G이전 매치의 끝
\Z입력의 끝이지만 종결자가 있는 경우
\z입력의 끝
\s공백문자
\S공백문자가 아닌 나머지 문자
\w알파벳이나 숫자
\W알파벳이나 숫자를 제외한 문자
\d[0-9]와 동일
\D숫자를 제외한 모든 문자

자바의 정규표현식 사용

자바에서는 java.util.regex패키지 안에 있는 클래스를 사용하게 된다.
regex 패키지 안에 있는 클래스는 Pattern과 Match로 이루어져 있다.

Pattern 클래스

Pattern 클래스의 메소드들은 다음과 같다.

TypeMethod설명
Patterncompile(String regex)주어진 정규표현식으로부터 패턴 생성
Matchermatcher(CharSequence input)문자열이 패턴과 일치하는지 확인해 Matcher 생성
static booleanmatches(String regex, CharSequence input)정규식과 문자열이 일치하는 지 확인
String[]split(CharSequence input)패턴이 일치하는 항목을 중심으로 input을 분할

Matcher 클래스

Matcher 클래스의 대표적인 메소드들은 다음과 같다.

TypeMethod설명
Patternpattern()Matcher가 해석한 Pattern을 반환
MatcherusePattern(Pattern new Pattern)Matcher가 사용할 Pattern을 변경
Matcherreset(ChaSequence input)Matcher가 분석할 문자열을 변경
intstart()매칭하는 문자열의 시작 인덱스를 변경
intstart(int groupt)매칭 문자열 중 group번째 문자열의 시작 인덱스를 반환. 0은 그룹의 전체 패턴을 의미. start(0) = start
intstart(String name)매칭 문자열 중 해당 name을 지정한 그룹의 시작 인덱스를 반환
intend()일치하는 문자열의 마지막 문자열 이후 인덱스를 반환
intend(int group)매칭되는 문자열 중 group번째 그룹의 마지막 문자열 이후(+1) 인덱스를 반환. 0은 그룹의 전체 패턴을 의미 end(0) = end()
intend(String name)매칭되는 문자열 중 해당 name을 지정한 그룹의 문자열 반환
Stringgroup()매치와 일치하는 문자열을 반환
Stringgroup(int group)매칭되는 문자열 중 group번째 그룹의 문자열 반환 0은 그룹의 전체 패턴을 의미 group(0) = group()
Stringgroup(String name)매칭되는 문자열 중 해당 name을 지정한 그룹의 문자열 반환
intgroupCount()패턴 내에 그룹핑한 개수를 반환(패턴에 있는 괄호 개수만큼)
booleanmatches()패턴 전체 문자열이 일치한 경우 true를 반환
booleanfind()패턴이 일치하는 다음 문자열을 찾는다.
StringreplaceAll(String replacement패턴과 일치하는 모든 문자열을 지정된 replacement로 변경

활용

활용에서 사용하는 예시는 프로그래머스의 파일명 정렬문제를 예시로 진행한다.

Pattern 객체 만들기

Pattern p = Pattern.compile("([a-z\\s.-]+)([0-9]{1,5})");

Pattern 클래스는 Pattern.compile(String regex)를 통해 생성할 수 있다.

Matcher 객체 만들기

Matcher m1 = p.matcher(o1.toLowerCase());

Matcher 클래스는 Pattern.matcher(String input)으로 생성할 수 있다.
이 때 지정한 regex에 맞는 문자열을 찾아 Matcher 객체로 가지게 된다.

여러 객체를 찾는 경우

m1.find();

앞서 Pattern을 만들 때 두개의 group을 찾게 되는데, 두개 모두 찾기 위해 find() 메소드를 사용할 수 있다.

각 group을 찾는 방법

return m1.group(1).compareTo(m2.group(1));

두개의 group으로 문자열을 찾았으므로 각각의 문자열을 찾기 위해 group()을 활용해 찾을 수 있다.

마치며

특히나 카카오 블라인드 테스트 문제에서 많이 나오게 되는 정규 표현식이다. 주로 사용되는 메서드와 표현식 정도는 계속 기억하는 것이 좋겠다.

Reference

https://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html
https://hbase.tistory.com/160
https://girawhale.tistory.com/77

profile
더 나은 성취

0개의 댓글