본문 바로가기

푸로그래밍/JAVA

[JAVA] 정규표현식 사용 방법 - 2 (Pattern, Matcher)

반응형

이 글은 [JAVA] 정규표현식 사용 방법 - 1 에서 이어지는 글이다.

 

 

Method 유효성 검사 가능 여부 문자열 재조합 가능 여부 기타
String.match 가능 불가능 일치 여부에 따라서 boolean값 반환
String.replaceAll 가능 가능 해당 표현식에 부합하는 부분을 치환(교체)
String.replaceFirst 가능(replaceAll과 동일) 제한적(replaceAll 하위호환) 해당 표현식에 부합하는 부분을 치환(교체), 첫번째만
String.split 가능 가능 해당 표현식에 부합하는 부분을 기준으로 배열로 나눈다.
Pattern & Matcher 가능 가능 다됨

String.match, String.replaceAll, String.replaceFirst, String.split에 대한 정보는 [JAVA] 정규표현식 사용 방법 -1 을 참조한다.

 

5. Pattern & Matcher 방식

사실 이 방식이 근본적인 방식이다. 

5.1. 유효성 검사

이 방식은 1편에서 기술했던 String.match방식과 거의 비슷한 방식이다.

String userId = "dumbalom009";

String regex = "^[a-zA-Z0-9]+$";

boolean result = Pattern.matches(regex, userId);

System.out.println(result ? "일치" : "불일치");

간단하게 userId가 하나이상의 영문숫자로만 이루어져있는지 검사하는 코드이다.

결과는 당연히 일치한다.

5.2. 문자열 재조합 (가공)

코드를 보자.

Pattern pattern = Pattern.compile("([가-힣]+)[은는이가].*([0-9]+).*개");
String str = "사과가 10개 있다.\r\n"
	+ "배는 14개가 있다.\r\n"
	+ "바나나는 12341234개가 있다.";

Matcher matcher = pattern.matcher(str);
while(matcher.find()) {
	String match = matcher.group();
	String group1 = matcher.group(1);
	String group2 = matcher.group(2);
	System.out.println("matched string: " + match);
	System.out.println("괄호1: " + group1);
	System.out.println("괄호2: " + group2);
	System.out.println();
}

이런 코드를 실행시키면 다음과 같은 결과가 나온다.

이렇게 직접 매치포인트를 반복하면서 소괄호"()"를 이용해서 그룹해서 replaceAll에서 처럼 $1, $2사용해서 문자열을 가공했다면, 이 방식을 사용하면 데이터를 직접 가져와서 vo에 넣는다거나 map에 넣어서 사용할 수 있다.

 

Pattern과 Matcher에는 이것보다 더 많은 메소드들이 존재한다. 

 

종합해보면 이렇게 정리할 수 있다.

Method 용도
String.match 어떤 문자열이 내가 원하는 형식인지 확인할 때 사용한다.
String.replaceAll 어떤 문자열 내에서 값"A"를 값"B"로 치환하거나, 간단한 문자열 데이터를 가공할 때 사용한다.
String.split 여러 데이터를 합쳐서 하나의 문자열로 주고받은 것을 다시 떼어낼때 사용한다.
Pattern, Matcher 텍스트 파일 내에서 데이터를 정규식 단위로 뽑아내서 그 값을 직접 사용할 때 사용한다.

 

다음 포스트에서는 JAVA에서 문자열로 정규표현식을 표현할 때 짜증나는 Escape에 대해서 다룬다.

반응형