본문 바로가기

프로그램/java

java의 정규표현식

반응형

자바 정규표현식

. : 임의의 한 문자(필수)
ex) ab. => abc, abd, abe

? : 바로 앞의 문자가 없거나 하나가 있음을 의미
ex) a?c => ac, abc, bc

* : 바로 앞의 문자가 없거나 하나 이상 반복
ex) ab* => a, ab, abb, abbb

+ : 바로 앞의 문자가 하나이상 반복
ex) ab+ => ab, abb, abb

^ : 문자열의 시작을 의미
ex) ^a => ab, abc, abcd

[^] : ^이후의 괄호안 형식은 제회
ex) ab[^c]+ : abd, abe, [^c] 자체가 한글자를 의미함

$ : 문자열의 끝을 의미
ex) abc$ : ab

[] : []안의 형식 일치
ex) [abc] : a, b, c, ab, ac, bc, abc

{} : {}앞 문자열 반복갯수
ex) ab{3} : ababab
    ab{2,} : ab, abab, ababab, abababab
    ab{1, 2} : ab, abab

() : ()안의 내용을 하나로 묶음
ex) (ab){2} : abab

| : or 연산
ex) (a|b|c) : a, b, c, ab, ac, bc, abc

[a-z] : 소문자
[A-Z] : 대문자
[0-9] : 숫자
[a-zA-Z0-9] : 영문, 숫자

자바에서 이용할 경우

String의 matchers 또는 Pattern 클래스와 Matchers 클래스 사용

 public static void main(String[] args) {
  String regExpStr = "^a.c$";
 
  String[] strArr = {"abc", "acc", "adc", "aec", "afc", "agc", "ahc", "aiic"};
 
  for(String str : strArr) {
   System.out.println("[" + str + "] : " + str.matches(regExpStr));
  }
 
  // email 형식 정규식
  // 개인적으로 해보니 ^$는 꼭 써줘야 겠음
  String regExpStr2 = "^[a-zA-Z0-9]+[@][a-zA-Z0-9]+[\\.][a-zA-Z0-9]+$";
 
  String emailStr = "babolsk@bbb.com";
 
  Pattern pattern = Pattern.compile(regExpStr2);
 
  Matcher match = pattern.matcher(emailStr);
 
  // 매칭에 맞을 경우 true
  System.out.println("[" + emailStr + "] : " + match.find());
 }