728x90

백준 'Contact' 문제를 풀면서 처음으로 정규표현식을 접했고, 이를 공부한 내용을 적어보려 한다.

 

정규표현식 혹은 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 언어이다.
즉, 문자열에 어떤 패턴의 문자들이 있는지 찾는데 도움을 주는 언어이다.

 

정규표현식은 영어로 Regular expressions로 적고, 줄여서 Regex라 한다.

 

자바에서 정규표현식은 java.util.regex 패키지에 있는 클래스를 사용하면 되고, 주로 Pattern 클래스Matcher 클래스가 사용된다.

 

✔️Pattern 클래스

Pattern 클래스의 matches() 메소드를 활용하면 대상 문자열을 검증하는 기능을 활용할 수 있다. 

mathches() 메소드의 첫번째 매개값은 정규표현식이고, 두번째 매개값은 검증 대상 문자열이다. 

검증 후 대상 문자열이 정규표현식과 일치하면 ture를, 불일치하면 false를 리턴한다.

 

boolean regex = Pattern.matches(pattern, str); //pattern=정규표현식, str=대상문자열
System.out.println(regex);

 

☑ 다양한 메소드

compile(String regex); 주어진 정규표현식으로부터 패턴 생성
matcher(CharSequence input); 대상 문자열이 패턴과 일치할 경우 true 반환
asPredicate(); 문자열을 일치시키는데 사용할 수 있는 Predicate 작성
pattern(); 컴파일된 정규표현식을 String 형태로 변환
split(CharSequence input); 문자열을 주어진 인자값 CharSequence 패턴에 따라 분리

 

✔️Matcher 클래스

Matcher 클래스는 대상 문자열의 패턴을 해석하고 주어진 패턴과 일치하는지 판별할 때 주로 사용된다.

Matcher 클래스의 입력값으로 CharSequence라는 새로운 인터페이스를 사용한다. 이를 통해 다양한 형태의 입력 데이터로부터 문자 단위의 매칭 기능을 지원 받을 수 있다. 

Matcher 객체는 Pattern 객체의 matcher() 메소드를 호출해서 얻는다.

 

Matcher matcher = pattern.matcher(str); //str=대상문자열
System.out.println(matcher.find());

 

☑ 다양한 메소드

matches() 대상 문자열과 패턴이 일치하는 경우 true 반환
find() 대상 문자열과 패턴이 일치하는 경우 true 반환 & 그 위치로 이동
find(int start) start 인자로 받은 위치부터 매칭 확인
start() 매칭되는 문자열의 시작 위치 반환
start(int group) 지정된 그룹이 매칭되는 시작 위치 반환
end() 매칭되는 문자열의 끝 바로 다음 위치 반환
end(int group) 지정된 그룹이 매칭되는 끝 바로 다음 문자 위치 반환
group() 매칭된 부분 반환
group(int group) 매칭된 부분 중 group번째 그룹핑 매칭 부분 반환
groupCount() 패턴 내 그룹핑한 전체 갯수 반환

 

✔️정규표현식 문법

^ 문자열 시작
$ 문자열 종료
. 임의의 한 문자(단 \은 넣을 수 없음)
* 앞 문자가 없을 수도 무한정 많을 수도 있음
+ 앞 문자가 하나 이상
? 앞 문자가 없거나 하나 있음
[ ]  문자의 집합 범위 나타냄
[0-9] : 숫자 (0부터 9)
[a-z] : 알파벳 (a부터 z)

▫앞에 ^ 나타나면 not 의미
{ }  횟수 또는 범위를 나타냄
( ) 소괄호 안의 문자를 하나의 문자로 인식
| 패턴 안에서 or 연산을 수행할 때 사용
\ 정규 표현식 역슬래시(\)는 확장문자 (역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미)
\b 단어의 경계
\B 단어가 아닌것에 대한 경계
\A 입력의 시작 부분
\G 이전 매치의 끝
\Z 입력의 끝이지만 종결자가 있는 경우
\z 입력의 끝
\s 공백 문자
\S 공백 문자가 아닌 나머지 문자
\w 알파벳이나 숫자
\W 알파벳이나 숫자를 제외한 문자
\d 숫자 [0-9]와 동일
\D 숫자를 제외한 모든 문자
(?!) 앞 부분에 (?!)라는 옵션을 넣어주게 되면 대소문자는 구분하지 않음

 

 

728x90

'✏️공부 > 💡JAVA' 카테고리의 다른 글

[JAVA] StringBuilder와 주요 메소드  (0) 2023.01.15
[Queue] 사용법  (0) 2023.01.06

+ Recent posts