정규 표현식
- 정해진 패턴을 사용해서 패턴에 일치하는 데이터 검색을 지원하는 표현식
특수문자
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, aaab 등 b앞에 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, eeeab등 ab로 끝나는 문자열과 일치
- 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 = aab
- 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를 포함한 모든문자열과 일치
단, abc중 bc는 한 그룹이다.
- 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 |