반응형
이 글은 [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에 대해서 다룬다.
반응형
'푸로그래밍 > JAVA' 카테고리의 다른 글
[JAVA, Kotlin] OkHttp3 인증서 신뢰 (1) | 2024.03.08 |
---|---|
[JAVA] File MD5 checksum (0) | 2023.12.21 |
[JAVA] 정규표현식 사용 방법 - 1 (String.match, String.replaceAll, String.replaceFirst, String.split) (0) | 2021.03.26 |