EzDoum

찾기
처음으로 | 찾기 | 아카이브 | 글 올리기 | 링크 | 자료실 | 통계 | 연락처 | 자유게시판
이지도움 특집
전체보기
네트워크
TI OMAP35x
TI DaVinci
Analog Blackfin
RobotWar2005
임베디드!
캐쉬의 모든것
메모리 할당 알고리즘
CPU 파이프라이닝
자료구조(Tree)
금융

Login
이름

암호

기억하기


사용자 등록

현재 접속중인 등록 사용자는 0명, 익명 사용자는 2명 입니다.
전체 등록 사용자: 751명

마지막 답장
·libcurl + fuse 조합으로 되는게 많네. (1)
·Linux Ftrace에 관해 (3)
·Android MTP ( Media Transfer Protocol ) (1)
·Lighttpd에 인증을 digest 사용시 IE 오동작 문제? (1)
·Dtrace에 관해 (1)

최근글
·OpenSSL and multi-threads (0)
·ARM 환경에서 OpenCL 사용 (0)
·IoT용 WIFI 모듈 비교 ( MCU ) 클래스 (0)
·Glances - 리눅스 여러 가지 항목을 한 화면에서 모니터링 (0)
·plugin 방식의 로그 분석기 (0)

뜨거운 감자
·나는 인터렉티브한 환경에서 역어셈블 한다. (12)
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)
·ASP.NET의 데이터 그리드와 사용자 컨트롤 (7)
·DHTML Editing Control (7)

가장 많이 읽은 글
·[Cache] 2-way Set-Associative 방식이란 무엇일까? (2)
·멀티쓰레드(Pthread) 프로그래밍
·Sorting Algorithm Animation (2)
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·ReverseEngineering - 종합선물세트 (2)

GNU REGEX (정규표현식) 프로그래밍 강좌
글쓴이: EzDoum 글쓴날: 2002년 05월 19일 오전 12:30
리눅스



글쓴이 : 한동훈 ddoch@hitel.kol.co.kr
날 짜 : 1997.5.23.
저작권 : 상업적인 용도가 아닌한 어디로든 이동 및 게재 가능
부탁사항 : 질문과 관련된 내용이나 답변을 요하는 내용은 메일로 적어주지
마시고 관련 프로그래밍 게시판을 이용해 주시면 성의껏 답변해
드리겠습니다. 제가 상당히 게으른 관계로 질문메일에 제대로 답
변을 못해드리고 있는 점 죄송합니다.


▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤
▤ 목차 ▤
▤ ▤
▤ 1. 들어가는 말 ▤
▤ 2. 정규표현식 문법 ▤
▤ 3. 공통적인 오퍼레이터 ▤
▤ 4. GNU 오퍼레이터 ▤
▤ 5. GNU 이맥스 오퍼레이터 ▤
▤ 6. Regex 프로그래밍 ▤
▤ 1) BSD Regex 함수 ▤
▤ 2) POSIX Regex 함수 ▤
▤ 3) GNU Regex 함수 ▤
▤ 7. 나오는 말 ▤
▤ ▤
▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤

1. 들어가는 말
---------------

안녕하세요. ddoch 한동훈 입니다.

flex 와 bison 을 공부하던 중 regex에 대한 정리가 필요하다고 생각하여 regex
메뉴얼 (자료실/문서/2027번 문서/regex.zip)로 공부를 하던 중 그냥번역하는
것 보다는 실제 예를 들어가면서 설명하는 것이 좋을 것 같아 이렇게 강좌로 올
립니다.

이 강좌 내용은 위 메뉴얼을 중심으로 설명을 드릴 예정이며 순서 또한 6. Regex
프로그래밍 중 난이도에 따라 비교적 쉬운 "BSD Regex 함수" 부터 설명을 하였다
는 점을 제외하고는 같습니다. 그리고 중간중간 이해를 돕기위해 예제로 설명을
하겠으며 설명내용 중 잘못된 것이나 참고사항은 위의 주소로 보내주시면 감사하
겠습니다. 그리고 설명 중 모자라는 부분이나 빠진 부분이 있을 수도 있으므로,
위에서 말씀드린 메뉴얼을 참고하시기 바라겠습니다.

그리고 6장을 제외한 나머지 내용은 일반 리눅스 및 유닉스 사용자들이 참조할 수
있는 공통적인 내용이며 6장은 프로그래머를 위한 내용입니다.

regex는 정규표현식을 이용하여 패턴 검색 및 매칭 작업을 수행하는 함수를 제공
하는 일종의 라이브러리입니다. Linux 나 UNIX에서 이 라이브러리는 아주 광범위
하게 사용되어 사용자 수준에서의 정규표현식을 사용하여 강력한 작업을 할 수 있
도록 도와주는 역할을 합니다. 아마도 리눅스나 유닉스를 사용하시면서 쉘상에서,

queen:~$ xanim [a-g]*.gif

이런 명령을 사용해보신 분들이 많이 계실 겁니다.
표준 쉘만이 아니라, ed, ex, sed, awk, vi, emacs, grep, egrep등의 유닉스 표준
유틸리티들과 postgres, bison, flex등의 툴 들에서도 내부적으로 사용을 하며,
프로그램을 직접 설치해보신 분은 소스디렉토리안에 "regex.h, regex.c"라는 파일
이 들어 있는 경우를 종종 보셨을 겁니다.

이런 정규표현식은 bison, flex에서도 사용된다고 하였는 데, 이것은 각종 문자열
파싱이나 문장, 구문해석에 사용되어 컴파일러 제작, 어문해석기 등의 프로그램을
만드는 데 사용됩니다.아직 정규표현식에서 "[가-나]"와 같은 한글을 처리하지 못
하고 있는 데, 이런 문제는 한글어휘분석기 및 한글토큰분석에 난제로 등장하고 있
는 관계로 이의 해결은 우리들의 몫이 아닐까 생각합니다.

설치는, 리동 자료실에 있는 regex 0.12 버젼 (자료실/2370번/regex012.tgz)을
받으셔서 root로 압축을 푸시고 "./configure; make; make install"로 설치를
하시면 됩니다. 네트웍에서 구하실려면 GNU 공식 사이트나 한국에서 미러를 하고
있는 카이스트에서 "regex" 로 검색하시면 찾을 수 있습니다.

말이 설치지, 설치되는 것은 info 파일과 texi 파일을 컴파일하여 해당디렉토리로
이동시키는 것일 뿐입니다. 압축을 푼 디렉토리에 보시면 regex.c 와 regex.h가
있는 데, 이 두개가 전부이므로 휴대를 하시면서 사용하시던지, 아니면 regex.o
파일로 링크만 시키시던지는 마음대로 하시면 될 것입니다. 참고로 슬랙 3.1에
"/usr/include"에도 "regex.h"가 있으나 본 헤더파일과는 다르므로 인클루드 하실
때 주의하시기 바랍니다. 테스트 파일은 "test/" 디렉토리에 있으므로 살펴보시면
도움이 될 것이며, 테스트 소스 컴파일은 "test/" 디렉토리에서 "make all" 로 하
시면 됩니다.

"regex.h" 파일에 아주 자세한 설명이 들어 있으므로 자주 참고를 하시기 바라며,
한부 뽑아서 보셔도 좋습니다.

정규표현식을 이용하여 프로그램을 짜시려는 분들이나 정규표현식을 익히시려는 분
들에게 조금이나마 도움이 되었으면 좋겠습니다.

정규표현식을 이용한 프로그램인 egrep을 이용하여 소스내에서 특정 토큰(예: int)
을 찾는 경우를 예를 들어보겠습니다.

queen:~$ egrep int something.c
...
이런식으로 찾으면 "printf" 도 같이 검색이 되므로 요구를 채워주지 못합니다.

queen:~$ egrep "[^[:alnum:]_]int[^[:alnum:]_]" something.c

이제, 하나의 독립된 토큰으로서의 "int"만 찾아서 우리에게 보여줍니다.

만일, egrep 같은 프로그램을 짤 때, 첫번째 인자(정규표현식)를 일일이 C로 파싱
하여 처리하는 것은 거의 사람의 인내성의 한계를 실험하는 것이 될 것입니다.
이럴 때 미리 짜놓은 regex 함수를 이용하여 해당 펑션에서 첫번째 인자와 해당파
일을 읽은 문자열을 넘겨주면 알아서 검색 및 패턴 매칭을 해주므로 아주 간편하
게 프로그래밍 할 수 있는 것입니다.

정규표현식에도 상당히 많은 형태의 문법이 있다는 것은 천천히 보여드리도록 하
겠습니다. 그리고 강좌 마지막에 가능하다면, 정규표현식을 이용하는 간단한 기
능의 egrep 버젼을 만들어 보도록 하겠습니다.

자, 그럼 이제 설명에 들어가볼까요..

  • 첨부 파일: reg.txt reg.txt (76 KiB(77,328 Bytes))
  • 재 등록일 : 2004년 02월 18일 오전 12:44

    [분류: 리눅스 인쇄용 페이지 본문 email로 보내기 ]


  • 답장 쓰기
    글을 올리시려면 로그인 (사용자 등록) 하셔야 합니다.


     Home ^ BACK TO TOP ^ EzDoum - 도움이 필요하세요~??
     Powered by KorWeblog 1.5.8 Copyleft © 2001 EzDoum, 관리자: EzDoum