Notice
Recent Posts
Recent Comments
관리 메뉴

안까먹을라고 쓰는 블로그

C#_정규식 본문

Language/C#

C#_정규식

YawnsDuzin 2012. 9. 1. 18:49

 

반응형

using System.Text.RegularExpressions;

 

정규식은 텍스트 문자열에서 패턴을 명시적으로 설명하는 데 사용할 수 있는 언어입니다. 이러한 패턴을 단순히 설명하는 것 외에도 일반적으로 정규식 엔진을 사용하면 일치 항목을 반복하거나 패턴을 구분 기호로 사용하여 문자열을 하위 문자열로 구문분석하거나 지능적인 방식으로 텍스트를 바꾸거나 형식을 다시 지정할 수 있습니다. 또한 정규식을 사용하여 강력하고 간단한 방식으로 텍스트처리와 관련된 많은 일반작업을 해결할 수 있습니다. 

 

■ 단순식

  패턴 입력(일치 항목)
   foo

foo, food, foot, "There's evil afoot."  

 

한정사 

 한정사는 항상 한정사 바로 앞(왼쪽)에 있는 패턴을 참조합니다.  

   1. * "0개 이상의 항목"을 나타냅니다.

   2. +는 "1개 이상의 항목"을 나타냅니다.

   3. ?는 "0개 또는 1개의 항목"을 나타냅니다. 

  

   패턴 입력(일치 항목)
     fo* foo, foe, food, fooot, "forget it", funny, puffy
     fo+ foo, foe, food, foot, "forget it"
     fo? foo, foe, food, foot, "forget it", funny, puffy

 

메타문자

   패턴 입력(일치 항목)
     . a, b, c, 1, 2, 3
     .* Abc, 123, 모든 문자열, 심지어 문자가 없어도 일치
     ^c:\\ c:\windows, c:\\\\\, c:\foo.txt, c:\ 다음에 오는 임의의 문자
     abc$ abc, 123abc, abc로 끝나는 모든 문자열
     (abc){2,3} abcabc, abcabcabc

 

문자클래스

   패턴 입력(일치 항목)
     ^b[aeiou]t$ Bat, bet, bit, bot, but
     ^[0-9]{5}$ 11111, 12345, 99999
     ^c:\\ c:\windows, c:\\\\\, c:\foo.txt, c:\ 다음에 오는 임의의 문자
     abc$ abc, 123abc, abc로 끝나는 모든 문자열
     (abc){2,3} abcabc, abcabcabc
     ^[^-][0-9]$ 0, 1, 2, … (-0, -1, -2 등과 일치하지 않음)

 

미리정의된 메타문자집합 

   메타 문자 해당 문자 클래스
       \a 벨(경보)과 일치합니다. \u0007
       \b 문자 클래스 안에 사용되는 경우를 제외하고 단어 경계와 일치합니다. 백슬래시 문자 \u0008과 일치합니다.
       \t 탭과 일치합니다. \u0009
       \r 캐리지 리턴과 일치합니다. \u000D
       \w 세로 탭과 일치합니다. \u000B
       \f 용지 공급과 일치합니다. \u000C
       \n 새 행과 일치합니다. \u000A
       \e 이스케이프와 일치합니다. \u001B
       \040 세 자리 8진수를 사용하는 ASCII 문자와 일치합니다. \040은 공백을 나타냅니다(십진수 32).
       \x20 두 자리 16진수를 사용하는 ASCII 문자와 일치합니다. 이 경우 \x2-는 공백을 나타냅니다.
       \cC ASCII 컨트롤 문자와 일치합니다. 이 경우 ctrl-C입니다.
       \u0020 정확히 4자리 16진수를 사용하는 유니코드 문자와 일치합니다. 이 경우 \u0020은 공백입니다.
       \* 미리 정의된 문자 클래스를 나타내지 않는 문자는 단순히 해당 문자로 처리됩니다. 그러므로 \*\x2A와 같습니다(*는 메타 문자가 아니라 리터럴임).
       \p{name} 명명된 문자 클래스 'name'에 있는 임의의 문자와 일치합니다. 지원되는 이름은 유니코드 그룹 및 블록 범위입니다. 예를 들어 Ll, Nd, Z, IsGreek, IsBoxDrawing 및 Sc(통화)와 같습니다.
       \P{name} 명명된 문자 클래스 'name'에 포함되지 않은 텍스트와 일치합니다.
       \w 임의의 단어 문자와 일치합니다. 비유니코드 및 ECMAScript 구현의 경우 [a-zA-Z_0-9]와 같습니다. 유니코드 범주에서는 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]와 같습니다.
       \W \w를 빼고, ECMAScript 규격 집합 [^a-zA-Z_0-9] 또는 유니코드 문자 범주 [^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]와 같습니다.
       \s 공백 문자와 일치합니다. 유니코드 문자 클래스 [\f\n\r\t\v\x85\p{Z}]와 같습니다. ECMAScript 옵션을 사용하여 ECMAScript 규격 동작을 지정한 경우 \s는 [ \f\n\r\t\v](선행 공백이 있음)와 같습니다.
       \S 공백이 아닌 문자와 일치합니다. 유니코드 문자 범주 [^\f\n\r\t\v\x85\p{Z}]와 같습니다. ECMAScript 옵션을 사용하여 ECMAScript 규격 동작을 지정한 경우 \S는 [^ \f\n\r\t\v](^ 다음에 공백이 있음)와 같습니다.
       \d 십진수와 일치합니다. 유니코드의 경우 [\p{Nd}]와 같고, 비유니코드 ECMAScript 동작의 경우 [0-9]와 같습니다.
       \D 십진수가 아닌 숫자와 일치합니다. 유니코드의 경우 [\P{Nd}]와 같고, 비유니코드 ECMAScript 동작의 경우 [^0-9]와 같습니다.

 

샘플 식        

   패턴 설명
     ^\d{5}$ 미국 우편 번호와 같은 5자리 숫자입니다.
     ^(\d{5})|(\d{5}-\d{4}$ 5자리 숫자 또는 5자리 숫자-대시-4자리 숫자입니다. 미국 우편 번호 또는 미국 우편 번호+4 형식과 일치합니다.
     ^(\d{5}(-\d{4})?$ 앞의 예와 같지만 더 효율적입니다. ?를 사용하면 교체를 통해 별도의 패턴 두 개를 개별적으로 비교해야 하는 대신에 패턴의 4자리 부분을 선택적으로 입력할 수 있습니다.
     ^[+-]?\d+(\.\d+)?$ 실수와 일치하며 선택적으로 기호를 사용할 수 있습니다.
     ^[+-]?\d*\.?\d*$ 위의 예와 같지만 빈 문자열에도 일치합니다.
     ^(20|21|22|23|[01]\d)[0-5]\d$ 24시간 값과 일치합니다.
     /\*.*\*/ C 스타일 주석 /* … */의 내용과 일치합니다.

 

정규식 API  

  메서드 설명
  Escape / Unescape 식에서 리터럴로 사용하기 위해 문자열에서 메타 문자 의미를 해제합니다.
  IsMatch 입력 문자열에서 일치하는 항목을 찾을 경우 True를 반환합니다.
  Match 입력 문자열에서 일치하는 항목을 찾을 경우 Match 개체를 반환합니다.
  Matches 입력 문자열에서 찾은 일치 항목이 모두 포함된 MatchCollection 개체를 반환합니다.
  Replace 입력 문자열에서 일치하는 항목을 지정된 바꾸기 문자열로 바꿉니다.
  Split 입력 문자열을 regex 일치 항목으로 구분하여 배열 요소로 나눔으로써 문자열 배열을 반환합니다.

  많은 메서드 외에도, 주로 Regex 개체의 생성자에서 지정할 수 있는 수많은 옵션이 있습니다. 이러한 옵션은 비트 마스크의 일부이므로    

  OR를 사용할 수 있습니다. 즉, Multiline과 Singleline을 동시에 사용할 수 있습니다. 

 

 

반응형

'Language > C#' 카테고리의 다른 글

[C#] 제네릭[Generic]  (0) 2012.09.04
[C#] 시간체크(Stopwatch)  (0) 2012.09.04
C#_[Dllimport]  (0) 2012.09.01
C#_Thread  (0) 2012.09.01
C#_Serial통신  (0) 2012.09.01
Comments