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

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




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

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


간단히 정리하자면 아래와 같다. 아래의 표현들만 알아도 어느정도 사용하는데 문제가 없다. 더 필요한 것이 있다면 위키를 참고하자.


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

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

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


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

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


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

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


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

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


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

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


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

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


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

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

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


^ : 문자열의 시작을 의미한다.


@ : 문자열의 끝을 의미한다.




C#에서도 정규식을 사용하여 패턴 매칭을 할 수 있다. C#에서 제공해주는 정규식 관련 라이브러리는 사용하기 간단하다. 따로 라이브러리를 추가할 필요가 없기때문에 적극 활용하도록 하자.


정규 표현식 앞에 @를 쓰는거는 이스케이프(escape) 문자 기능을 동작하지 않게한다. 꼭 써주는 것이 좋다.


정규표현식을 위해선 Regex 클래스를 사용한다. 해당 클래스에 정규식표현을 가지고 객체를 만들면 된다. 그리고 Regex의 IsMatch 함수를 써서 패턴매칭을 한다. IsMatch 함수는 해당 패턴과 매칭하여 결과를 Bool 형식으로 반환한다. 일치하면 true, 일치하지 않으면 false를 반환한다.


아래는 사용 예제이다. 첫번째는 휴대폰 번호를 검사하는 것이고 두번째는 한글 이름 3글자를 검사하는 패턴 매칭이다. 

휴대전화 예제는 01 로 시작을 하고 그다음에 0,1,6,7,8 이 세번째 자리에 오고 그다음에 - 문자오고 0부터 9까지의 숫자로 4개의 조합을 만들고 다시 -가 오고 그다음에 0부터 9까지의 숫자로 4글자를 만든다.

3글자 이름을 검사하는 것은 가부터 힣까지의 글자(한글 전체)를 가지고 3가지 조합을 만들면 된다.


추가로 소문자는 a-z 라고하면 되고 대문자는 A-Z로 표현하면 된다.



네임스페이스 using System.Text.RegularExpressions; 을 추가해주어야 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
String phoneNumber = "010-1234-5555"//"010-a234-b123"는 miss match
Regex regex = new Regex(@"^01[01678]-[0-9]{4}-[0-9]{4}$");
if (regex.IsMatch(phoneNumber))    
{
    Console.WriteLine("Match");
else 
{
    Console.WriteLine("Miss Match");
}
 
String name = "김공돌";        //"김공1"는 miss match
regex = new Regex(@"^[가-힣]{3}$");    //한글 3글자
if (regex.IsMatch(name))
{
    Console.WriteLine("Match");
}
else
{
    Console.WriteLine("Miss Match");
}





JAVA에서 정규식을 사용하여 패턴 매칭에 관한 포스팅이다. 참고하도록 하자. http://hijuworld.tistory.com/58
Posted by 꿈만은공돌
,