C# 정규식

.Net에서는 정규식을 위해 Regex 라는 클래스를 제공한다.
Regex 클래스는 System.Text.RegularExpressions 네임스페이스에 있다.
우선 전화번호는
Regex regex = new Regex(@"\d{3}-\d{3,4}-\d{4}");

\d 는 [0-9] 와 같은 표현식이며 실제로 전화번호는 전부 0으로 시작하기때문에 0 이라고 써도된다.
Regex regex = new Regex(@"0\d{2}-\d{3,4}-\d{4}");

두번째 자리는 핸드폰의 경우는 모두 1 이므로 아래와 같이 수정할수 있다.
Regex regex = new Regex(@"01\d-\d{3,4}-\d{4}");

{n} 은 반복되는 횟수이다. \d 는 숫자라는 뜻이다.
첫번째 \d{3} 은 숫자가 3개 반복된다는 뜻이다.

대쉬 "-" 는 그대로 인식된다. \d{3,4} 는 숫자가 3자리에서 4자리라는 표현이다.
여기까지면 전화번호 표현은 끝이다.
첫번째 표현은 아래와 같이 다르게 표현할수 있다.
Regex regex = new Regex(@"[0-9]{3}-[0-9]{3,4}-[0-9]{4}");

[0-9] 는 0에서 9 사이의 문자가 올수 있다는 뜻이다.
[0-9]{3} 는 0에서 9사이의 문자가 3번 반복된다는 뜻이다.


그럼, 아래 예제를 실행해보자.
        static void Main(string[] args)
        {
            Regex regex = 
                 new Regex(@"\d{3}\-\d{3,4}\-\d{4}$");

            string[] target = {
                                  "011-333-1234",
                                  "010-4442-4321",
                                  "032-333-2333",
                                  "123-1224-12345678",
                                  "000-33-33"
                              };

            foreach (string s in target)
            {
                Match m = regex.Match(s);
                if (m.Success)
                {
                    Console.WriteLine(m.Value + " <- valid");
                }
                else
                {
                    Console.WriteLine(s + " <- invalid");
                }
            }

        }

위 정규표현식에서 $ 는 문자열의 마지막이라는 말이다. $를 지우고 다시 실행해보면 4번째 예제도 정규식에 부합된다고 나온다.
key = value 형식의 문자열에서 키와 값을 찾아서 사용하기 위해서는

        static void Main(string[] args)
        {
            Regex regex = new Regex(@"^\w+\s*=\s*\w+$");

            string[] target = {
                                  "key1  = val1",
                                  "key2=val2",
                                  "key3=    val3",
                                  " key4 = val4  ",
                                  "    key5   =  val5  "
                              };

            foreach (string s in target)
            {
                Match m = regex.Match(s);
                if (m.Success)
                {
                    Console.WriteLine(m.Value + " <- valid");
                }
                else
                {
                    Console.WriteLine(s + " <- invalid");
                }
            }

        }

위 정규식에서 ^는 문자열 가장 처음을 뜻한다. ^와 $를 지우고 해보면 4,5번은 invalid하다고 나올것이다.
더욱 많은 예제는
  http://www.google.co.kr/#sclient=psy-ab&hl=ko&newwindow=1&site=&source=hp&q=c%23+regex+cheatsheet&pbx=1&oq=c%23+regex+cheatsheet&aq=f&aqi=&aql=1&gs_sm=e&gs_upl=761l761l0l1328l1l1l0l0l0l0l120l120l0.1l1l0&bav=on.2,or.r_gc.r_pw.&fp=e5fb3ac19a752789&biw=1920&bih=979

댓글

이 블로그의 인기 게시물

C#에서 포인터 사용

WPF RichTextBox 와 Document의 바인딩

WPF 이미지위에 라인 그리기(WPF DrawLine on exist Image)