정규 표현식이라는 표현식을 이용하여 패턴이 매칭하는지 검사 할 수 있다. 예를들어 어떤 문자열이 A부터 C사이에 글자로 시작하면서 5글자이내의 글자인지를 검사하거나 해당 문자열이 숫자로만 이루어지고 10글자 이내의 글자인자를 검사할 수 있다. 정규표현식을 잘 작성하면 해당 문자열이 전화번호형식인지 이메일 형식인지 등을 쉽게 검사할 수 있다. 구글링을 통해 해당 정규표현식은 쉽게 찾을 수 있다.

 정규 표현식을 사용하여 패턴 매칭을 하는 것이 속도도 빠르고 정확하다. 사용자가 코드를 아무리 잘짜더라도 정규표현식을 이용하여 패턴 매칭을 하는 것보다 빠르기는 힘들다.

아래 링크는 정규 표현식을 정리한 위키백과이다. 참고하도록 하자.

https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D


 프로그래머들이 많이 사용하고 유용하기 때문에 많은 언어에서는 쉽게 정규표현식을 사용하여 패턴매칭을 할 수 있도록 언어차원에서 라이브러리를 지원해준다.

 JAVA 에서도 정규식을 사용하여 패턴 매칭을 할 수 있다.



간단히 핵심을 정리하자면 아래와 같다. 정말 중요하고 기본적인 내용만을 정리했다. 좀더 자세한 내용은 위에서 소개한 위키를 참고하도록 하면 된다.

. : 하나의 문자를 의미한다.
예제 : A.B 패턴은 AAB(일치), A1B(일치), AAB(불일치), AB(불일치) 이다.

? : 아무문자도 없거나 하나의 문자 있는 것을 의미한다.

예제 : A?B 패턴은 AAB(일치), AB(일치), AAA(불일치), AAAB(불일치) 이다.


* : 0개나 하나이상의 문자가 있는 것을 의미한다.

예제 : A*B 패턴은 AB(일치), AAAAAAAAAAAB(일치), A123B(일치), AAAAAAAAAAAA(불일치) 이다.


+ : +앞에있는 문자가 한번이상 반복됨을 의미한다.

예제 : AB+ 패턴은 AB(일치), ABBBB(일치), A(불일치), ABC(불일치) 이다.


[] : [ ] 사이에 있는 형식이 일치하는것을 의미한다. 즉 [AB] 는 A, B만일치, [A-Z] 는 A부터 Z중 하나의 문자와 일치한다.

예제 : [A-C] 패턴은 A(일치), B(일치), AB(불일치), BC(불일치) 이다.


() : ( ) 사이에 문자가 하나의 묶음이된다. 즉 (ab)+ 는 abababab 와 일치한다.

예제 : (ab) 패턴은 ab(일치), ba(불일치) 이다.


{} : { } 사이에 숫자를 쓰면 그 숫자만큼 패턴이 반복됨을 의미한다.

[A-C]{1,3}는 A,B,C 를 1개에서 3개 조합하면 된다. AAA도 가능하고 A, BA, ABC, CBA도 가능하다.

예제 : [A-C]{1,3} 패턴은 AA(일치), CBC(일치), ADA(불일치), ACCC(불일치) 이다.


[^] : ^다음에 문자를 쓰면  해당 문자를 제외한다는 의미한다.

예제 : [^A-C]D 패턴은 DD(일치), AD(불일치), D(불일치), DDD(불일치) 이다.


JAVA에서 정규표현실을 사용하여 패턴매칭을 하는 예시는 아래와 같다.

2가지의 import도 반드시 시켜줘야 한다. Pattern 클래스는 패턴을 저장하고 Matcher라는 클래스는 검사결과를 저장한다. 그래서 Matcher에 함수인 matches 함수를 사용하여 결과를 boolean 으로 리턴받을 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class RegexTestStrings {
    public static void main(String[] args) {        
         Pattern pattern = Pattern.compile("패턴 입력");  
         Matcher match = pattern.matcher("검사할 문자열"); 
         boolean bool = match.matches();
         if(bool)
             System.out.println("일치");
         else
             System.out.println("불일치");
     }
}
cs


아래는 실제 사용 예제이다.

A부터C사이의 글자로 시작을하고 그다음 글자가 D인 패턴과 일치하는지 검사한다.

AD는 해당 패턴과 일치한다. 따라서 일치가 출력된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class RegexTestStrings {
    public static void main(String[] args) {        
        Pattern pattern = Pattern.compile("[^A-C]D"); 
        Matcher match = pattern.matcher("AD"); 
        boolean bool = match.matches();
        if(bool)
            System.out.println("일치");
        else
            System.out.println("불일치");
    }
}
cs


아래링크는 C#에서의 정규식을 사용한 패턴매칭에 관한 포스팅이다. 참고하도록 하자.

C#에서 정규식을 사용하여 패턴 매칭(Regex, IsMatch) : http://hijuworld.tistory.com/22


Posted by 꿈만은공돌
,