사용법은 Ruby, Python, C#, VB.NET이 거의 유사한 방법을 나타낸다.
ttern | Matching Criterion | Example |
---|---|---|
+ | 앞의 글자에 연달아서, 뒤에 글자가 붙어서 따라 오는경우 | to+ 는 too, tooo 처럼 |
* | 바로 앞의 글자가 없거나, 또는 바로앞글자가 있고 뒤에 글자가 따라올때 | to* 는 t, to, too 처럼 바로앞의 글자생략까지 포함 |
? | 바로 앞의 글자가 없거나 있는경우 | te?n 는 ten or tn 임. |
{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_19 은 \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. |
| | 논리기호 OR의 의미. | "in|en" matches enquiry. |
[. . . ] | 괄호 안에 있는 문자 중에 있는 하나의 문자(알파벳, 점은 문자를 의미함) | [aeiou] 는 u(또는 각각 a, e, i, o 모두가능). [\d\D]는 하나의 숫자나 숫자가 아닌글 |
[^. . .] | 괄호 안에 없는 하나의 문자(알파벳) | [^aeiou] matches x. |
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
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);