정규표현식이란?
정규 표현식에 대한 개념은 이전 포스팅에서 확인..
2021.11.10 - [Back-end/Java] - [Java] Java Pattern 클래스(자바 정규 표현식) - 사용법
[Java] Java Pattern 클래스(자바 정규 표현식) - 사용법
정규표현식이란? 특정 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 형식 언어 Ex) 전화번호, 이메일, 주민 번호 등! 개발할 때 형식대로 제대로 입력했는지 검증할 경우에 정규표현식을
diddl.tistory.com
Matcher 클래스
문자열의 패턴을 해석하고 주어진 패턴과 일치하는지 체크할 때 주로 사용.
Matcher객체는 Pattern객체의 matcher() 메소드를 호출해서 얻는다!!
* 선언 코드
import java.util.regex.Pattern;
- java.util.regex.Matcher를 import하면 사용할 수 있다.
* 객체 생성
아래 코드에서 보듯이 Pattern객체의 matcher메소드로 Matcher객체를 생성한다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("^[a-zA-Z]*$"); //영문자만
String val = "abcdef"; //대상문자열
Matcher matcher = pattern.matcher(val); // Matcher 객체 생성
}
}
Matcher 클래스 주요 Method
문자열과 패턴이 일치하는지 알려주는 - find()
- public boolean find()
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class stringCheck {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("([\\d]{2,3}-([\\d]{3,4}-[\\d]{4}))");
String INPUT = "My Phone number is 010-1234-5678.";
Matcher matcher = pattern.matcher(INPUT); //Matcher 객체 생성
System.out.println(matcher.find()); //패턴 일치하는지 검사해서 결과 반환!!
}
}
대상 문자열과 패턴이 일치하는 경우 true를 반환하고, 그 위치로 이동
문자열과 패턴이 일치하는 위치에 대체 문자열로 대체하는 메소드 - appendReplacement()
- public Matcher appendReplacement(StringBuffer sb, String replacement)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class test {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("a*b");
String INPUT = "abccc-abccc-abccc";
Matcher matcher = pattern.matcher(INPUT); //Matcher 객체 생성
StringBuffer buffer = new StringBuffer();
while(matcher.find()){
matcher.appendReplacement(buffer, "!");//패턴을 찾아 !로 바꿔주기
}
matcher.appendTail(buffer);
System.out.println(buffer);
}
}
반복문을 돌며 matcher.find()로 문자열의 처음부터 매칭 되는 구간을 찾는다. appendReplacement() 함수를 이용하여 매칭되는 구간을 ! 문자로 대체했다.
반복문을 빠져 나와보면 appendTail() 이라는 함수가 있다. 해당 함수에 대해 알아보자
appendTail()
- public Matcher appendTail(StringBuffer sb)
위 예제에서 반복문을 돌면서 a와 b로 구성된 문자열 부분을 !로 바꿔주며 버퍼에 저장한다.
그럼 반복문의 젤 마지막에서 어떻게 될까..?
appendReplacement() 함수는 패턴이 매칭 되는 부분까지 버퍼에 붙여 넣는다. 그렇기 때문에 반복문의 젤 마지막에서 문제가 발생한다. "!ccc-!ccc-abccc" 젤 마지막 부분에서 ab가 매칭되니 이 부분까지만 붙여 넣고 반복문이 종료되어 뒤의 ccc가 손실되는 것이다. 그래서 appendTail() 함수를 통해 꼬리 부분을 붙여주는 것이다.
이해가 잘 안간다면.. 위의 예제에서 appendTail() 부분을 주석 처리한 후 출력 결과를 보면 이해가 갈 것이다.
group()
- public String group([int group | string name])
매칭된 부분을 반환한다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class test {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("a*b");
String INPUT = "abccc-abccc-abccc";
Matcher matcher = pattern.matcher(INPUT); //Matcher 객체 생성
while(matcher.find()){
System.out.println(matcher.group()); //일치하는 부분 반환, 출력
}
}
}
결과는 당연히..
ab
ab
ab
가 순서대로 출력 된다.
'Back-end' 카테고리의 다른 글
| [Spring] Transaction(트랜잭션)에 대해 (0) | 2021.11.26 |
|---|---|
| [Spring] DI(Dependency Injection), IoC(Inversion of Control), Bean 정리 (0) | 2021.11.25 |
| [Spring] Spring Framework MVC (0) | 2021.11.18 |
| [Spring] @Controller와 @RestController 차이점 (0) | 2021.11.18 |
| [Spring] 스프링 계층 구조의 이해 (0) | 2021.11.18 |