[Java] 정규 표현식(Regular Expression)

JUNBEOM PARK·2022년 2월 22일
0

🧨 Java

목록 보기
27/33
post-thumbnail

🤔 정규 표현식(Regular Expression) ?

정규 표현식 혹은 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 언어다.
정규 표현식은 텍스트 편집기나 스크립트 언어에서 문자열의 검색과 치환을 위해 지원하고 있다.



🔍 Java 정규 표현식

자바 프로그래밍에서 정규 표현식을 작성하기 위해서 java.util.regex 패키지에 있는 클래스들을 사용 하며, 주로 Pattern 클래스와 Matcher 클래스가 있다. 또한 String 클래스의 정규 표현식을 지원하는 메소드도 있다.



1. Pattern 클래스

java.util.regex.Pattern 클래스는 matches() 메소드를 지원한다. 이 메소드를 이용해서 특정 문자열이 주어진 정규식에 매칭되는지 확인할 수 있다.

String pattern ="^[0-9]*$" // 숫자만 포함
String str = "123321";

boolean result = Pattern.matches(pattern, str);
System.out.println(result); // true

matches() 메소드의 첫 번째 인자는 정규 표현식이고, 두 번째 인자는 정규표현식이 매칭되는지 확인하고자 하는 문자열이다. 만약 문자열이 정규표현식에 매칭되면 true, 아니면 false를 리턴한다.




Patern 클래스의 메소드

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


2. Matcher 클래스

Matcher 클래스는 문자열의 패턴을 해석하고 패턴과 일치하는지 체크할 때 주로 사용한다.
Pattern 클래스와 마찬가지로 Matcher 클래스는 생성자가 없다. Matcher 객체는 Pattern 객체의 matcher()메소드를 호출해서 얻는다.

Pattern pattern = Pattern.compile("^[0-9]*$");
String str = "04234234";

Matcher matcher = pattern.matcher(str);
System.out.println(matcher.find());


Matcher 클래스의 메소드

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


3. String 클래스

String 클래스에도 정규 표현식을 지원하는 메소드가 있다.


Scanner sc = new Scanner(System.in);
System.out.print("문자열 입력 : ");
String str = sc.nextLine();
		
//abc 문자를 포함 여부 체크
if(str.matches(".*abc.*")) {
	System.out.println("매칭");
}else {
	System.out.println("비매칭");
}


String 클래스의 메소드

메소드내용
matches(String regex);문자열 안에 주어진 패턴이 존재 하는지 여부 반환
replaceAll(String regex, String replaceStr);패턴과 일치하는 모든 부분을 replaceStr로 치환
replaceFirst(String regex, String repalceStr);패턴과 일하는 첫 부분을 replaceStr로 치환
split(String regex);패턴과 일차하는 구분자를 기준으로 분할하여 배열로 반환


📃 정규 표현식 문법

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

참고자료
https://hbase.tistory.com/160

profile
DB 엔지니어👍

0개의 댓글