본문으로 바로가기

정규표현식

category Development/C# 2010. 7. 21. 13:05

정규 표현식
  - 정해진 패턴을 사용해서 패턴에 일치하는 데이터 검색을 지원하는 표현식

특수문자

1.  '.' 특수 문사
   1-1 설명 : '.'는 어떤 글자던 임의의 한 글자를 가르킨다.
   1-2 예제 : a.c = abc, acc, adc 등  한글자만 대신한다.
    - ex) s.e -> sae, sbe, sce, sde ...
           .ce -> ace, kce, dce ...

2. '*' 특수 문자
  
2-1 설명 : '*'는 바로 앞의 문자를 의미, 그 문자가 없거나 하나 이상임을 나타낸다.
   2-2 예제 : a*b = b, aab, aaabb앞에 a가 없거나 하나 이상 존재하는 문자열과 일치
    - ex) s*e -> e, se, sse, ssse ...
           abc* -> ab, abc, abcc, abccc ...
           h*im -> im, him, hhim, hhhim ...

3. '+' 특수 문자
   3-1 설명 : '+'는 바로 앞의 문자를 의미, 그 문자가 하나 이상인 패턴을 가리킨다
   3-1-1 추가 설명 :  '*' 와 마찬가지로 앞에 하나의 문자가 있어야한다.
   3-2 예제 : a+b = ab, aab, abfsfb등 b앞에 a최소 하나 이상 존재하는 문자열과 일치
    - ex) s+e -> se, sse, ssse ...

4. '?' 특수 문자
   4-1 설명 : '?' 는 바로 앞의 문자를 나타내고 그 문자가 없거나 1개임을 나타낸다.
   4-1 예제 : ab?c = ac, abc a와 c사이에 b가 있거나 없는 문자와 일치
    - ex) th?e -> te, the

5. '^' 특수 문자
   5-1 설명 : '^'는 바로 뒤의 문자열을 의미 그 문자열로 시작되는 것을 나타냄
   5-2 예제 : ^abc = abc is alpabet, abcdefg 등의 문자열과 일치
    - ex) ^The -> The girl is, Theater
           ^a?bc ->bc, abc ...
           ^.e -> he, me, request, settle ...
           ^s.e? -> sa, sae, sb, sbe ...

6. '$' 특수 문자
   6-1 설명 : '$'는 바로 앞의 문자열을 의미하며 그 문자열로 끝나는것을 나타낸다.
   6-1-1 추가 설명 : '^'가 제일 앞에 들어가면 '$'는 문자열 끝부분 패턴을 나타낸다.
   6-2 예제 : ab$ = dddab, cccab, eeeabab로 끝나는 문자열과 일치
    - ex) a?bc$ -> eeabc, seebc, bc ...
           t.e$ -> onthetoe, bctae, appetitte ...
           s?e+$ -> e, se, ee, eee, seee, seee ...

7. '[]' 특수 문자
   7-1 설명 : '[]'안에 있는 문자열중 하나를 포함한 문자를 의미한다.
   7-1-1 추가 설명 : '[]'안에서는  ' - ' 로범위지정이 가능하다. 예:[a-c] = abc
   7-2 예제 : [abc]d = affd, begd, card 등 a,b,c를 포함한 문자열과 일치
    - ex) [ab]cd -> acd, bcd ...
           ^[ab]cd -> acdtest, bcdest ...
           [a-z] -> 영문소문자
           [a-zA-Z] -> 영문자
           [0-9] -> 숫자
           ag[a-z] -> aga, agbcd, agzzz ...
           ^ab[cd]ef -> abcef, abdef ...
           ^[a-zA-Z] -> 영문자로 시작
           [a-zA-Z0-9]$ -> 영문자나 숫자로 종료
          
 [^a-zA-Z] -> 영문자는 제외(^이 []안에 들어가면 의미가 틀려짐)

8. '{}' 특수 문자
   8-1 설명 : '{}'는 앞에 있는 문자나 문자열의 개수를 나타낸다.
   8-2 예제 : a{2}b = aa
b
    - ex) a{2}b -> aab
            a{2,}b -> aab, aaab, aaaab ...
            a{2,3}b -> aab, aaab


9. '()' 특수 문자
   9-1 설명 : '()'안에있는 문자열을 그룹화 한다. 
   9-2 예제 : a(bc) = abcbc, abcbcbc abc를 포함한 모든문자열과 일치
                
단, abcbc는 한 그룹이다.
    - ex) a(bc){2} -> abcbc
            a(bc)* -> abcbcbc ...

10. '|' 특수문자
   10-1 설명 : '|' 는
or 연산자이다
   10-2 예제 : i | you = i am busy, you have... 등 i나 you를 포함한 문자열과 일치
    - ex) he|she -> he, she is ...
           (he|she)is -> heis, sheis ...

11. 특수 문자 사용
   - ^ . [ ] $ ( ) | * + ? { } \
   - 앞에 \붙혀서 사용
   - ex) \*+ -> *가 하나 이상 포함된 패턴

12. 문자 클래스
   12-1 : [[:alpha:]] 알파벳 문자중 하나
[a-zA-Z], [a-Z]와 동일
   12-2 : [[:digit:]] 숫자 한자를 의미
[0-9] 와동일
   12-3 : [[:alnum:]] 알파벳 문자나 숫자중 하나를 의미
[a-zA-Z0-9]와 동일
   12-4 : [[:space:]] 공백 문자

문자 클래스
1. \w [a-zA-Z_0-9] 단어 문자를 나타냅니다.
2. \W [^a-zA-Z_0-9] 단어 문자가 아닌 문자를 나타냅니다.
3. \s [ \f\n\r\t\v] 공백 문자를 나타냅니다.
4. \S [^ \f\n\r\t\v] 공백 문자가 아닌 문자를 나타냅니다.
5. \d [0-9] 10십진수를 나타냅니다. 
6. \D [^0-9]10진수가 아닌 숫자를 나타냅니다. 


C#을 이용하여 정규표현식을 사용해 보자.

선언부
using System.Text.RegularExpressions;

//Regex reg = new Regex(패턴);
Regex reg = new Regex(@"<(?<key>.+)>.*\r\n(?<value>.*)\r\n");

//MatchCollection matchCol = reg.Matches(검사할문장);
MatchCollection matchCol = reg.Matches(inputString);


string result = string.Empty;
for (int i = 0; i < matchCol.Count; i++)
result += string.Format("{0},{1}\r\n", matchCol[i].Groups["key"].Value, matchCol[i].Groups["value"].Value)


패턴 이해
Regex reg = new Regex(@"<(?<key>.+)>.*\r\n(?<value>.*)\r\n");
여기서 ?<key> ?<value> 이 부분은 그룹으로 묶는다는 것이다.
결과값에서 matchCol[i].Groups["key"].Value 처럼 꺼낼 수 있다.

위 패턴은 key와 value 두개의 그룹으로 나눠 저장하고, key값은    aaa<b>aaa 에서   "< >" 사이의 값 b를 추출하여 저장한다.

value값은 그 다음줄에 모든 값을 value에 저장한다. \r\n은 다음줄을 의미하므로 \r\n 와 \r\n 사이는 한줄을 의미하기때문이다.

즉.

tistory<name>site
wory
tistory<age>asdfasdf
27

이런식으로 되어 있다면
matchCol 배열에
(name,wory)
(age,27)
식으로 저장되게 될것이다.

다음은 내가 많이 사용하는 문자열 추출을 위해서...보통 abc#####end 처럼..앞과 끝은 알아도 중간에 것을 몰라 추출을 하기 어려울때가 있다...이럴떤 위에 패턴을
abc(?<value>.*)end 와 같은 방법으로 추출하면 된다.

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

텍스트에 숫자만 입력 가능하게  (0) 2010.07.21
ComBox의 활용  (0) 2010.07.21
세계기준시간(UTC) 편차  (0) 2010.07.21
비주얼스타일과 텍스트 랜더링 설정  (0) 2010.07.21
문화권 식별자  (0) 2010.07.21