본문 바로가기

Microsoft/C# & ASP.NET

C# Regular Expression (정규식 기호)

C# 정규식 기호표 (Regular Expression)

Pattern

Matching Criterion

Example

+

앞의 글자에 연달아서, 뒤에 글자가 붙어서 따라 오는경우

to+ too, tooo 처럼
to
뒤에 어떤것이 오는경우

*

바로 앞의 글자가 없거나, 또는 바로앞글자가 있고 뒤에 글자가 따라올때

to* t, to, too 처럼 바로앞의 글자생략까지 포함

?

바로 앞의 글자가 없거나 있는경우

te?n ten or tn
teen
포함 안됨

{n}

n의수(입력된 숫자)만큼 정확하게 앞글자를 반복한다.

te{2}n teen이다.  ten 이나 teeen 포함안됨

{n,}

n의수(입력된 숫자) 이하 만큼 반복 해준다

te{1,}n ten 이나 teen 이다.  tn 포함안됨.

{n,m}

 n m 사이의수(입력한 두수의 차이)만큼 글자를 반복

te{1,2}n ten 이나 teen 이다

\

슬래쉬 듸에 오는 (+, *, ?처럼) 특수한 의미를 가진 문자가 오면 그대로 처리하라는 의미

A\+B A+B 동일한의미.
http://i1.daumcdn.net/icon/editor/spacer2.gif?v=2  +
특수한 의미를 가진 문자이므로 슬래쉬를 써준것

\d \D

(\d) 숫자 (\D) 숫자가 아닌 글자를 말함. 전자는[0-9],  후자는[^0-9] 일치

\d\d 55 , \D\D xx 
예를 들수 있음

\w \W

(\w) 문자를(밑줄이나 괄호등 까지  포함),  (\W) 문자가 아닌글을 말함
이는 [a-zA-Z0-9_]. [^a-zA-Z0-9_]. 일치함

A_19   \w\w\w\w 이고
($).
 \W\W\W  이다

\n \r \t \v \f 

순서대로, 다음줄로 넘어가기, 그줄의 첫번째로 돌아가기, 가로 , 세로 ,  피드

\s \S

(\s) 빈공간을 (\S) 빈공간이 아닌 글자로 채워진 공간을 말함

\w\s\w\s\w A B C 처럼 문자 네개 공백두개

. (dot)

. (마침표) 한글자인 문자를 대표하는 기호문자 가운데 \n 인식못함

a.c 예는 abc.
abcc
안됨

|

논리기호 OR 의미.

"in|en" matches enquiry.

[. . . ]

괄호 안에 있는 문자 중에 있는 하나의 문자(알파벳, 점은 문자를 의미함)

[aeiou] u(또는 각각 a, e, i, o 모두가능). [\d\D] 하나의 숫자나 숫자가 아닌글

[^. . .]

괄호 안에 없는 하나의 문자(알파벳)

[^aeiou] matches x.

 

 정규식 그룹명 이용법


string txt ="Monday Hi:88 Lo:56 Tuesday Hi:91 Lo:61";

string rgPatt = @"( ?[a-zA-Z]+)\s*(?Hi:\d+\s*Lo:\d+)";
// 그룹명은 위에서 처럼  ?<그룹명>  으로 명명 해주고
MatchCollection mc = Regex.Matches(txt, rgPatt); 
// 스트링값과 정규식을 mc 그룹으로 묶어준후에 
foreach(Match m in mc) // mc그룹안의 그룹 하나 하나를 m으로 명명해주고
{
   Console.WriteLine("{0} {1}",
                     m.Groups["day"],m.Groups["temps"]);
                     //m의 그룹을 위에서 지정해준 이름으로 불러옴. m.Groups["그룹명"]
}
//출력하면   Monday Hi:88 Lo:56
//               Tuesday Hi:91 Lo:61


숫자 값만 리턴 하는 정규식 예

protected string NumNull(string data)
        {
            if (string.IsNullOrEmpty(data))
                return "0";
            else
            {
                Regex reg = new Regex(@"[^\d]+");
                if (reg.IsMatch(data))
                    return data;
                else
                    throw new Exception("숫자 값이 필요한 곳에 문자열이 존재합니다. 오류자료 : " +data);
            }
        }


기타 추가 예제

//문자열이 숫자 형식인지를 확인하는 함수
public bool IsNumber(string strValue)
{
     if (strValue == null || strValue.Length < 1)
        return false;
  
    //요기서 정규식 사용
     Regex reg = new Regex(@"^(\d)+$");
  
     return reg.IsMatch(strValue);
}
 
 
// 문자열이 알파벳으로만 구성되어 있는지를 확인하는 함수
 public bool IsAlpabet(string strValue)
 {
     if (strValue == null || strValue.Length < 1)
        return false;
 
     Regex reg = new Regex(@"^[a-zA-Z]+$");
     return reg.IsMatch(strValue);
 }
 
 
 
  //시작문자열이 알파벳이고, 알파벳과 숫자로 이루어진 문자열인지 여부 확인하는 함수
  public bool IsAlpaNumber(string strValue)
  {
     if (strValue == null || strValue.Length < 1)
        return false;

     Regex reg = new Regex(@"^[a-zA-Z]+[0-9]*$");
     return reg.IsMatch(strValue);
  }