[Java] java.util 패키지 - Pattern 클래스, Matcher 클래스(+ 정규 표현식)

chael_lo·2021년 5월 20일
0

Java

목록 보기
31/52

정규 표현식(Regular Expression)

Meta 문자, Escape 문자 등을 이용하여 일정한 규칙의 문자열을 표현하는 방법이다.

정규 표현식의 종류

  • ^문자 : 문자(열)로 시작됨을 의미
  • 문자$ : 문자(열)로 종료됨을 의미
  • . : 임의의 문자 하나를 의미(\ 문자 표현 불가능)
  • [문자1문자2문자3] : 나열된 문자들 중 하나를 의미
  • [^문자1문자2문자3] : 나열된 문자들이 아닌 문자들 중 하나를 의미
  • [문자1-문자2] : 문자1부터 문자2 범위의 문자 중 하나를 의미
  • [문자열|문자열|문자열] : 나열된 문자열들 중 하나를 의미
  • 문자열+ : 문자열이 1번이상 반복됨을 의미
  • 문자열* : 문자열이 0번이상 반복됨을 의미
  • 문자열? : 문자열이 0번 또는 1번 존재함을 의미
  • 문자열{숫자} : 문자열이 숫자만큼 반복됨을 의미
  • 문자열{숫자1,숫자2} : 문자열이 숫자1부터 숫자2 범위만큼 반복됨을 의미
  • (?!)문자열 : 문자열에서 대소문자를 구분하지 않음을 의미
  • (?=문자열) : 문자열을 반드시 포함하고 있음을 의미
  • (?!문자열) : 문자열을 반드시 포함하고 있지 않음을 의미
  • \s:공백이 존재하지 않는 문자열을 의미
  • \S:공백이 존재하지 않는 문자열을 의미
  • \w:영문자, 숫자, 특수문자(_)의 문자로만 구성된 문자열을 의미
  • \W:영문자,숫자,특수문자(_)의 문자를 제외한 문자들로 구성된 문자열을 의미
  • \d:숫자 형태의 문자로만 구성된 문자열을 의미
  • \D:숫자 형태의 문자를 제외한 문자들로 구성된 문자열을 의미
  • \메타문자: 메타문자를 일반 문자로 표현

Pattern 클래스

정규 표현식을 저장하기 위한 클래스다.

Pattern 클래스의 메서드 종류

Pattern.matches(String regex, CharSequence input)

정규 표현식과 입력값을 전달받아 입력값에 대한 규칙을 비교하여 결과를 반환하는 메소드다.

//영문자로 시작되며 영문자,숫자,특수문자(_)의 조합으로 6~20 범위의 문자가 맞는지 비교
if(!Pattern.matches("^[a-zA-Z][a-zA-Z0-9_]{5,19}$", id)) {
   System.out.println("[에러]입력한 아이디는 형식에 맞지 않습니다.");
   System.exit(0);
}

Pattern.compile(String regex)

정규표현식을 전달받아 Pattern 인스턴스에 저장하여 반환하는 메소드다.

Pattern idPattern= Pattern.compile("^[a-zA-Z]\\w{5,19}$");

Matcher 클래스

정규표현식과 비교 문자열을 저장하기 위한 클래스다.
정규 표현식과 문자열을 비교하여 변경 또는 삭제 처리하는 기능 제공한다.

Matcher 클래스의 메서드 종류

Pattern.matcher(CharSequence input)

Pattern 인스턴스에 저장된 정규 표현식에 비교 문자열을 제공받아 저장한 Matcher 인스턴스를 반환하는 메소드다.

Pattern idPattern= Pattern.compile("^[a-zA-Z]\\w{5,19}$");

//id는 스캐너로 입력 받은 문자열
Matcher idMatcher=idPattern.matcher(id);

Matcher.matches()

Matcher 인스턴스에 저장된 정규표현식과 문자열에 대한 규칙을 비교하여 결과를 반환하는 메소드다.(false : 불일치, true : 일치)

//아이디 validation 체크
if(!idMatcher.matches()) {
	System.out.println("[에러]입력한 아이디는 형식에 맞지 않습니다.");
	System.exit(0);
}

이메일 입력받는 프로그램 예시

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ValidationApp {
  public static void main(String[] args) {
      Scanner scanner=new Scanner(System.in);
      System.out.print("이메일 입력 >> ");
      String email=scanner.nextLine();//입력 받은 이메일을 email 변수에 저장

      if(email==null || email.equals("")) {//email 값 체크
          System.out.println("[에러]이메일을 반드시 입력해 주세요.");
          System.exit(0);
      }

      //이메일 규칙 - [사용자명@도메인명] 형식의 문자열로 표현
      String emailReg="^([a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+)*$";
      if(!Pattern.matches(emailReg, email)) {//이메일 규칙과 입력받은 email 비교
          System.out.println("[에러]입력한 이메일은 형식에 맞지 않습니다.");
          System.exit(0);
   		}
	}
}
profile
천천히 꾸준히

0개의 댓글