잊지 않겠습니다.

사용법은 Ruby, Python, C#, VB.NET이 거의 유사한 방법을 나타낸다.

ttern

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는 동일한의미.
  + 가 특수한 의미를 가진 문자이므로 슬래쉬를 써준것

\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 = @"( ?<day>[a-zA-Z]+)\s*(?<temps>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

Example
Regex regex = new Regex(@"(?<name>CN)=(?<property>(\w)*(\d))", RegexOptions.Singleline);
string mailStoreString =
    "CN=BusinessMailstore5,CN=First Storage Group,CN=InformationStore,CN=EXBE03,CN=Servers,_
CN=First Administrative Group,CN=Administrative Groups,CN=TMEX,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=tmex,DC=co,DC=kr";
            
MatchCollection matchCollections = regex.Matches(mailStoreString);
foreach(Match m in matchCollections)
{
    Console.WriteLine(m.Groups["property"]);
}

 

Custom Log 데이터 분류

string examString = "Error : Name : 대리점가입자, PhoneNumber : 01041471048 / Open";
Regex regx = new Regex(@"(\w|\s|\:|\,)*(PhoneNumber\s\:\s)(?<phonenumber>\d{11})(\s\/\s\w+)");


Log4net 에서의 데이터 분류 하기 

string examString = "22:43:53 [26] INFO  com.hostway.lib.Syncmail [(null)] - Send SMS Message : To 01071933972";
Regex regx = new Regex(
       @"(?<eventdate>\d\d:\d\d:\d\d)(\w|\s|\[|\]|\(|\)|\.)*-\s(?<message>(\w|\s|\d|\:|)*)"
             );

Assert.IsTrue(regx.IsMatch(examString));
MatchCollection matches = regx.Matches(examString);
Assert.AreEqual(1, matches.Count);
Assert.AreEqual("22:43:53", matches[0].Groups["eventdate"].Value);
Console.WriteLine(matches[0].Groups["eventdate"].Value);
Console.WriteLine(matches[0].Groups["message"].Value);
Posted by Y2K
,