씨앗뿌리는 개발자의 개발노트

Java에서는 정규식 패턴 확인 및 추출을 위해 Matcher class의 find()matches() 메소드를 사용하게 된다.

find() 메소드

Matcher.find()는 하나의 문자열에서 여러 개의 정규식 패턴에 해당하는 문자열들을 찾을 때 사용한다. find()를 호출할 때 마다 다음 문자열이 있으면 true를 반환하고 더 이상 없을 때는 false가 반환된다. find()가 true일때는 start(), group(), end()메소드를 호출할 수 있다.

start()는 해당 문자열의 시작 위치, end()는 끝 위치를 반환한다. gruop()은 해당 문자열 자체를 반환한다.

Pattern stringPattern = Pattern.compile("[a-zA-Z]+");
Matcher m = stringPattern.matcher("hello there how are you");
while (m.find()) {
    int start = m.start();
    String group = m.group();
    int end = m.end();
    System.out.println("position [%d, %d] = %s".formatted(start, end, group));
}

위 코드를 실행하면 다음과 같이 출력된다.

position [0, 5] = hello
position [6, 11] = there
position [12, 15] = how
position [16, 19] = are
position [20, 23] = you

find(int start)

find()를 호출할 때 int start를 인자로 전달하면 해당 인덱스로부터 정규식 문자열을 검색하게 된다.

matches()

find()가 부분 패턴을 찾는 것과 달리, matches()는 주어진 문자열 전체가 지정한 정규식 패턴에 부합하는지를 확인한다.

Pattern stringPattern = Pattern.compile("[a-zA-Z]+");
Matcher m = stringPattern.matcher("hello there how are you");
System.out.println(m.matches());

지정한 문자열에는 a-zA-Z 이외에도 공백이 포함되어 있기 때문에 위 코드를 실행하면 false가 출력된다.

Pattern stringPattern = Pattern.compile("[a-zA-Z ]+");
Matcher m = stringPattern.matcher("hello there how are you");
boolean matched = m.matches();
System.out.println(matched);

위와 같이 정규식에 공백을 포함시키면 true가 반환된다.

Pattern.matches(String regex, CharSequence input)

Pattern의 정적 메서드인 matches()는 첫 번째 인자인 regex가 두 번째 인자인 input 문자열에 일치하는지 여부를 반환한다.

boolean matches = Pattern.matches("[a-zA-Z ]+", "hello there how are you");
System.out.println(matches);

 

'java' 카테고리의 다른 글

Java Completable Future 사용법  (0) 2023.04.25
Java 8에서 문자열 포맷팅  (1) 2023.03.18
Java Gradle Project에서 Unit Test코드 작성하기  (0) 2023.03.06
Java Stream API  (0) 2023.03.04
profile

씨앗뿌리는 개발자의 개발노트

@씨앗뿌리는 개발자

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!