정규식을 써보자!


정규식을 설명하기 위해서 한가지 예를 들기로 한다.(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

글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

덧글을 달아 주세요

  1. TTF 2008/08/05 03:04 고유주소 고치기 답하기

    http://www.regexbuddy.com/
    정규식 검사하는 프로그램

  2. TTF 2008/08/05 03:08 고유주소 고치기 답하기

    http://technet.microsoft.com/ko-kr/magazine/cc137729.aspx
    마소 TechNet에 실린 정규식 관련 글

  3. 하루 2008/08/15 15:39 고유주소 고치기 답하기

    TTF 바쁘냐? 오늘 전화하니 안받드만 8월 18일날 서버 IDC 옴겨서 새벽부터 아침까지 접속 안될꺼거든 (미리 빽업받아놓는거도 좋구 ㅋㅋ) 일단 그리알고잇어

  4. TTF 2008/08/15 23:02 고유주소 고치기 답하기

    ㅎㅎ 서버 통합 프로시저 작업하고 야근해서,
    늦게까지 잠들었어요. 일어나니까 오후 2시 ㅎㅎ

  5. indra 2008/08/19 00:37 고유주소 고치기 답하기

    하루 바쁘냐., 얼굴도 안보이더라.,.,ttf 마찬가지,,ㅡㅡㅋ

  6. Rosso 2008/08/21 22:30 고유주소 고치기 답하기

    바쁜가 보군 ttf형

  7. TTF 2008/08/24 13:24 고유주소 고치기 답하기

    요즘 개인적으로 힘든일만 계속 겹치고 있어서 개인 시간이 없어요. 마치 고등학교 3학년으로 되돌아간 느낌.
    새벽 4시에 자고 9시에 출근하고...
    뭔가 이건 아닌데, 내 인생은 왜 이러지 하면서도 열심히 살려는 마음으로 포기하지 않고 최선을 다하고 있어요.

  8. 푸른~~~ 2008/08/26 13:25 고유주소 고치기 답하기

    흠 여기에 댓글진행중...
    겁나게 바쁘게 사는가보군..
    나는 2단계 공항 오픈하고 교대근무시작해서 요즘 시간이 조금 남는 분위기 인데...