Study/java

[Java] String - matches : 정규식 일치 여부

 

Java String 클래스의 matches 메소드는 문자열이 정규 표현식과 일치하는지 여부를 판별합니다.

주로 텍스트 검색, 데이터 추출과 같은 다양한 상황에서 사용됩니다.

matches메소드는 정규식을 사용하기때문에 정규식을 알면 문자열을 더 효율적으로 찾을수 있습니다.

 

matches 메소드란?

public boolean matches(String regex)

 

matches 메소드의 특징입니다.

정규 표현식 사용: matches 메서드는 매개변수로 정규 표현식을 받습니다. 이 정규 표현식에 문자열이 완전히 일치하는지 확인합니다.

완전 일치: 문자열의 전체 내용이 정규 표현식과 일치해야 합니다. 일부만 일치하는 경우 false를 반환합니다.

 

matches 예제 코드

// 문자열에 영어 알파벳 대문자만 포함되어 있는지 판별
String s = "ABC";
System.out.println("ABC matches \"^[A-Z]*$\" : " + s.matches("^[A-Z]*$"));

s = "Aabc";
System.out.println("Aabc matches \"^[A-Z]*$\" : " + s.matches("^[A-Z]*$"));

matches 결과
matches 결과

 

매개변수로 사용된 "^[A-Z]*$"은 정규표현식입니다.

이는 처음(^)부터 끝($)까지 0개 이상(*)의 문자가 A부터 Z([A-Z])인 문자로 구성되어있는가?를 표현합니다.

그래서 위의 코드를 실행한 결과 대문자 알파벳으로 구성된 "ABC"문자열만 true가 반환되는 것을 확인할 수 있습니다.

 

정규 표현식 예제

정규식에서 자주 사용하는 패턴은 다음과 같습니다.

표현식 설명
^[0-9]*$ 숫자만 허용
^[a-zA-Z]*$ 영문자만 허용
^[가-힣]*$ 한글만 허용
^01[0-9]-\\d{3,4}-\\d{4}$ 전화번호(01X-XXXX-XXXX)
^[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-z]+$ 이메일

 

예제 코드

전화번호 및 이메일 검사

String phone = "010-1234-5678";
System.out.println("Phone number matches: " + phone.matches("^01[0-9]-\\d{3,4}-\\d{4}$")); // true

String email = "example@example.com";
System.out.println("Email matches: " + email.matches("^[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-z]+$")); // true

 

 

 

matches 메서드를 사용한 코드 간소화

정규 표현식을 사용하면 복잡한 문자열 검사 로직을 간결하게 만들 수 있습니다.

 

matches 메소드는 매개변수가 정규식이기 때문에 100% 매칭되지 않더라도 일부 매칭되는 값도 찾을 수 있다는 장점이 있습니다.

예를 들어, 숫자나 영어 알파벳으로 구성된 문자열을 찾는다고 가정해봅시다.

이를 정규식 없이 찾으려고 하면 먼저 해당 문자열에 숫자가 있는지 판별한 다음 알파벳이 있는지 판별해야 합니다.

 

이러한 로직에 정규식을 사용한다면 한 줄만으로 코드를 작성할 수 있습니다.

String numStr = "123abc";

//matches를 사용하지 않았을때
boolean flag = false;
for(char c : numStr.toCharArray()) {
  if(Character.isDigit(c)) {
    flag = true;
    break;
  }
  if(Character.isAlphabetic(c)) {
    flag = true;
    break;
  }
}
System.out.println("flag : " + flag);

//matches를 사용했을때
System.out.println("matches : " + numStr.matches("^[a-zA-Z0-9]*$"));

matches 사용여부에 따른 결과
matches 사용여부에 따른 결과

 

 

결과는 같지만 matches를 사용한 코드가 더 간결합니다.

아마 matches의 실제 로직은 더 복잡할지도 모릅니다.

하지만 그런 복잡한 로직을 matches라는 메소드에 담았으니 그것을 사용하면 됩니다.

 

읽으면 좋은 글

[Java] String - regionMatches() 부분 문자열 비교

 

[Java] String - regionMatches() 부분 문자열 비교

regionMatches이 메소드는 영역을 매칭해서 서로 같은지 판별합니다.실제 공식문서에서도 Tests if two string regions are equal.라고 정의하고 있습니다. 2가지 방식으로 사용합니다.regionMatches(int toffset, St

priming.tistory.com

[Java] 정규식으로 특수 문자 포함 여부 체크 및 제거하는 방법

 

[Java] 정규식으로 특수 문자 포함 여부 체크 및 제거하는 방법

자바로 정규식을 사용해서 문자열에 특수문자가 포함되어있는지 여부와 정규식을 사용하여 문자열에 포함된 특수문자를 제거하는 방법을 설명드리겠습니다. 정규식 특수문자 포함 여부 체크

priming.tistory.com