::NPTEAM:: Network Programer Team

검색 :
RSS 구독 : 글 / 댓글 / 트랙백 / 글+트랙백

정규식을 써보자!


정규식을 설명하기 위해서 한가지 예를 들기로 한다.(http://www.npteam.net)

^ht{2}p:(/{2})w{3}(.)(n.{0,10})(?:com|net|(co.kr))
  1. 문장의 처음은 h로 시작한다.
  2. "t"글자가 연속 2번 출력된다.
  3. "p:" 가 출력된다.
  4. "/"가 연속 2번 출력된다.
  5. "w"가 연속 3번 출력된다.
  6. 아무글자 1글자를 그대로 출력한다.
  7. n으로 시작해서 최소 0에서 최대 10글자까지 아무글자나 출력한다.
  8. 맨 뒤에 종결 문자는 "com", "net", "co.kr" 3가지중 하나라도 만족하면 출력한다.
윈도우에서 모든것을 표현하는 *문자는 ".*"로 사용가능하다.

따라서 위의 정규식으로 출력되는 결과를 찾으면 다음과 같이 출력된다.


이 수식을 이용해서 VBScript에서 이용하려면 다음의 샘플 코드를 사용하시면 됩니다.

■ 정규식에 의해서 일치하는 문장이 있는지 없는지 판단하는 스크립트
Dim objRegExp
Set objRegExp = New RegExp
objRegExp.MultiLine = True
objRegExp.Pattern = "^ht{2}p:(/{2})w{3}(.)(n.{0,10})(?:com|net|(co.kr))"
 
SubjectString = "http://www.npteam.net"
 
If objRegExp.Test(SubjectString) Then
  ' Successful match
  MsgBox "Success"
Else
  ' Match attempt failed
  MsgBox "Failed"
End If


■ 정규식에 의해서 일치하는 문장을 리턴받고 싶을 경우
Dim ObjRegExp, MatchWords, ResultString
Set ObjRegExp = New RegExp
ObjRegExp.MultiLine = True
ObjRegExp.Pattern = "^ht{2}p:(/{2})w{3}(.)(n.{0,10})(?:com|net|(co.kr))"
 
SubjectString = "http://www.npteam.net"
 
Set MatchWords = ObjRegExp.Execute(SubjectString)
If MatchWords.Count >= 1 Then
  ResultString = MatchWords(0).Value
Else
  ResultString = "Nothing"
End If
 
MsgBox ResultString


이해를 돕기 위해 샘플 정규식을 한가지 소개하고자 한다.

■ 숫자 000 ~ 255
^([01][0-9][0-9]|2[0-4][0-9]|25[0-5])$
  1. 첫번째 자리의 숫자 (0, 1), 두번째 자리 숫자(0~9), 세번째 자리 숫자(0~9)
  2. 첫번째 자리의 숫자(2), 두번째 자리 숫자(0~4), 세번째 자리 숫자(0~9)
  3. 첫번째 자리의 숫자(2), 두번째 자리의 숫자(5), 세번째 자리의 숫자(0~5)

결국 각각 다음과 같은 범위를 제한하고 있다.

000 ~ 199, 200 ~ 249, 250 ~ 255

왜 이렇게 3단계로 분류해야 할까?
정규식은 숫자를 정수로 판단하는 것이 아니라 각각 하나의 문자로 판단하기 때문이다.
따라서 문자가 올 수 있는 범위를 세부적으로 제한함으로써 위와 같은 결과를 얻을 수 있다.

이외에도 정규식을 활용하면 수 많은 표현을 아주 간결하게 찾아낼 수 있다.

 
2008/08/05 02:07 2008/08/05 02:07

맨 위로