| expect(또는 Tcl)에서 정규표현식으로 문자열 매칭 | 작성일 : 2009/08/05 11:46 |
| 조회수 : 27777 |
|
제 목 : expect(또는 Tcl)에서 정규표현식으로 문자열 매칭 작성자 : 좋은진호(truefeel, http://coffeenix.net/ ) 작성일 : 2009.8.4(화) expect 스크립트는 Tcl을 이용한 스크립트 언어다. expect에서 확장된 명령만 사용하지 않으면 Tcl에서도 그대로 사용할 수 있다. 이 글에서 사용한 스크립트는 expect나 Tcl에서 동일하게 사용할 수 있다. expect 스크립트나 Tcl에서 정규 표현식으로 문자열을 매칭하는 방법에 대해 설명한다. 정규 표현식에 대한 기본 설명은 하지 않는다. 정규 표현식이 무엇이며, 표현식은 어떻게 되는지에 대해서는 전정호님이 쓰신 '정규표현식 기초'( http://coffeenix.net/doc/regexp/ ) 또는 신성국님의 'Using Regular Expression'( http://coffeenix.net/doc/regexp/ ) 문서를 읽어보기 바란다. 이 글은 expect(또는 Tcl)에서 매칭 판단을 어떻게 하는지를 목적으로 한다. ![]() 1. regexp 명령어 regexp 명령어를 사용하는데 기본 형식은 다음과 같다. '문자열'내에 '정규표현식'과 매칭되는 것이 있다면 1이상을, 없다면 0를 return한다. 그리고 매칭이 됐다면 '매칭된결과_저장할_변수명' 변수에 매칭된 부분의 문자열이 저장된다.
예를 들어보자. 쉘상에서 바로 테스트할 것이므로 tclsh (Tcl쉘)을 실행하거나 expect명령을 실행한다.
regexp에 다음과 같은 스위치를 함께 사용하면 유용하다. -nocase : 대소문자 구별을 하지 않는다. -all : 매칭되는 곳이 여러군데 일 경우 매칭 갯수를 반환한다. regexp {1[A-Z]+} $str match 는 0을 반환하겠지만, regexp -nocase {1[0-9]+} $str match 는 대소문자 구별을 하지 않으므로 1을 반환한다. regexp -all {1[0-9]+} $str match 는 1234abcd1234에서 매칭되는 곳이 2곳이므로 2를 반환한다. 다음 예제는 매칭변수가 여러개 사용되어 있다.
정규표현식에 익숙한 분이라면 금방 눈치챘을 것이다. $match는 매칭된 문자열 전체가, 뒤에 $sub1~$sub3까지 3개의 서브매칭변수는 앞쪽 ( )부터 하나씩 매칭되어 저장된다.
2. 스크립트 예제 주어진 IP 형식이 맞는지 검사하여 맞으면 IP를 출력한다. 단 IP주소는 자리수만 맞는지 체크하는 간단한 매칭 방식을 사용했다.
3. 참고 및 관련 자료 1) New Regular Expression Features in Tcl 8.1 http://www.tcl.tk/doc/howto/regexp81.tml 2) regexp http://tmml.sourceforge.net/doc/tcl/regexp.html 3) Regular Expression Examples http://wiki.tcl.tk/989 4) expect 예제들 - 여러 서버에 일괄 명령을 위한 expect 스크립트 http://coffeenix.net/board_view.php?bd_code=1519 (2007) - 스위치장비 접속/명령용 expect 스크립트 http://coffeenix.net/board_view.php?bd_code=1327 (2006.1) - expect 프로그래밍 예 두번째 http://coffeenix.net/board_view.php?bd_code=115 - expect 프로그래밍 예 http://coffeenix.net/board_view.php?bd_code=112 |
||||||||||||||||
|
|