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로 보내기 ]

  • <  ASP Template Class (version 1.5) - 4GuysFromRolla.com | ASP 설계하기  >
    GNU REGEX (정규표현식) 프로그래밍 강좌 | 답장: 7개 | 본문에 답장
    정렬 :  
    답장 EzDoum 2002년 08월 15일 오후 12:22 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
    http://www.boost.org/libs/regex/index.htm
    http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_tip&no=35


    [수정]

    답장 EzDoum 2003년 10월 25일 오후 02:18 [ 이글에 답장 | 본문에 답장 | 책갈피 ]


    [수정]


    답장 EzDoum 2003년 10월 25일 오후 02:19 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
    UltraEdit에서 문자열 변환 2 (정규표현식 사용)

    작성자 : 민이 ( irismin@heemin.com / www.HeeMin.com )

    역시나 1탄과 같이 울트라 에디트 도움말을 기본으로 작성했습니다.
    1탄은 기본적인 Replace에 대해 알아봤습니다.
    이번엔 정규표현식에 대해 알아보겠는데요, 이미 PHP 등에서 겪어 보신 분들은
    이 정규표현식이 얼마나 편리한 지 잘 아실 겁니다.
    그것이 울트라에디트에서도 됩니다.

    PHP로 말하자면 eregi_replace() 가 되는 셈이겠죠..
    (아주 커다란 문서의 경우 PHP로 하기보다는 울트라 에디트로 하는 게 더 빠른...
    물론 로컬 문서 작업의 경우입니다)


    정규 표현식을 사용하려면 먼저 Replace 창의 Regular Expressions에 체크를 하시고
    Find What에 표현식을 적어주시면 됩니다.

    표현 내용
    % 행의 시작을 의미합니다. (개행문자 등 제외)
    $ 행의 끝을 의미합니다 (개행문자 등 제외)
    ? 모든 형식의 한 글자를 의미 (개행문자 등 제외)
    * 갯수에 상관 없이 모든 형식의 문자열을 의미 (개행문자 등 제외)
    ---> a*b => ab, acb, a9203823b 참, bac 거짓
    + 한 번 또는 두 번 이상의 선행 문자를 의미합니다
    (a+ ==> fda, dsfaa, dsaaa dfaaaa 참. bdfdf 거짓)
    ^b Page Break를 의미합니다.
    ^p 역시 1탄의 설명대로 개행문자를 의미 (PHP의 \n)
    ^t 탭문자를 의미합니다.
    [ ] 1글자 이상의 대괄호 내부 조건대로의 문자를 의미
    ^{A^}^{B^} "A 거나 B"를 의미
    ^ 이 뒤에 1~9 까지의 숫자를 써서 상단에 그룹으로 묶어 준 부분을
    대체할 수 있습니다.
    예를 들어 ^(h*o^) ^(f*s^)를 찾아서 ^2 ^1 로 바꿔라 라고 했다면
    hello folks 같은 단어를 찾아서 folks hello 로 바꾸는 것이죠.
    ^( 과 ^) 는 그룹을 묶어 줄 때 쓰입니다.


    예제 1 :

    m?n 는 m,아무 문자 하나,그리고 n을 의미합니다.
    따라서 "man", "men", "min"은 참이지만 "moon" 과 같이 가운데 두 글자가 들어간 경우 거짓이 됩니다.



    예제 2 :

    t*t 는 t, 그리고 갯수에 상관없는 문자열, 그리고 t 를 의미하니까
    "tt", "test", "tonight" 이 참이 되며,
    "tea time"과 같은 경우도 참이 되는데, 이 때 replace 에 걸리는 것은
    tea time 이 아니라 tea t 가 됩니다.
    "tea" 와 같은 경우는 거짓이겠죠
    그리고,
    tea
    time
    과 같이 개행문자가 사이에 들어간 경우엔 잡히지 않습니다.



    예제 3 :

    Te+st 는 T와 한 개 이상의 e, 그리고 st를 의미하므로
    Test, Teeeest, Teeeeeeeeeeeeeeeest 는 참이 됩니다.
    하지만 tst 등은 거짓이겠죠.



    예제 4 :

    [aeiou] : 소문자로 된 영어 모음을 의미
    [,.?] : ","나 "."나 "?"를 의미
    [0-9, a-z] 숫자 혹은 소문자 영문자를 의미
    [~0-9] 어떤 문자든지 숫자를 제외한 문자를 의미 (~ 는 부정의 뜻이죠)


    예제 5 :

    ^{John^}^{Tom^}
    Find What 에 이것을 넣는다면 John 또는 Tom 을 찾아라가 됩니다.



    예제 6 :
    (A 또는 B) 그리고 (C 또는 D)를 찾아라도 되겠죠?
    ^{John^}^{Tom^} ^{Smith^}^{Jones^}
    이것이 찾는 경우는 아래와 같습니다.
    John Smith
    John Jones
    Tom Smith
    Tom Jones



    예제 7 :
    제 경우엔 파워포인트, 엑셀 등의 테이블을 프론트페이지로 붙여넣었을 경우 소스에
    쓸데 없는 style 태그나 span 태그 등을 지우는데 이 표현식을 썼는데요.
    이런 식으로 썼습니다.
    Find What : style="*"
    Replace With :
    일케 하면 모든 Style=" 로 시작하고 "로 끝나는 문구가 사라집니다.

    또한
    Find What : <span*>
    Replace With :
    일케 해주시면 모든 span 태그가 사라지겠죠

    그리고,
    Find What : <table*>
    Replace With : <table border=1 cellpadding=0 cellspacing=0>
    이렇게 해주면 모든 테이블이 통일 될 테구요.



    P.S 소스 정리를 하는데에 PHP로 프로그램을 짜서 돌렸었는데,
    제가 못 짜서 그랬는지 속도도 느리고.. 울트라 에디트를 쓰면 번개같이 됩니다.
    기본적으로 어떤 어떤 것들을 어떻게 정리하겠다... 라고 생각을 해 놓으신 후,
    울트라 에디트의 매크로 기능을 통해 위의 정규표현식으로 바꿔치기를 하면
    대규모의 소스를 아주 빠르게 정리해 낼 수 있습니다.

    Replace : All Open Files 옵션이나 Replace In Files 를 쓰시면 다수의 화일을
    원하는 대로 따르게 다듬어 버릴 수가 있죠.

    그 외에도 엑셀에서 빼내온 데이타나 엑셀에 넣을 데이타 등을 만질 때도 Colimn Mode 까지
    사용하신다면 최고의 효과를 보실 수 있을 겁니다.

    에고... 사설이 길었네요. 고난도의 활용법이나.. 이런 것들도 나눴으면 좋겠는데..
    다음번엔 매크로의 활용법을 한 번 적어볼께요.



    Learning to Use Regular Expressions by Example (예제로 배우는 정규표현식)

    현재 제가 작업하고 있는 사이트는 폼을 통한 유저입력에 많은 의존을 하고 있고 모든
    데이터는 데이터베이스로 보내기 전에 검사해야합니다. 처음에는 PHP3의 정규
    표현식 함수를 사용하면 된다는 건 알고 있었지만 어떻게 정규표현식을 작성해야 할지
    몰랐습니다. 제가 필요로 했던 것은 뭔가 예제가 될만한 것이었죠. (물론 처음으로
    본 것은 PHP3 매뉴얼과 POSIX 1002.3 스펙이었죠 하지만 예제가 없어서 별 도움이
    되질 못했습니다) 덧 붙여 말하자면 정규표현식에 대한 좋은 글을 웹에서 찾기란 정말
    어려웠습니다. 전 경험과 시행착오로 점점 그것에 대해 알게 되었고 별거 아님을
    깨달았습니다. 그래서 이 글에서 문법에 대한 직접적인 설명을 하고 금액 입력과
    email 주소 문자열을 을 검사하는 정규표현식을 작성하는 단계를 설명하려합니다.

    - Basic Syntax of Regular Expressions (정규표현식의 기본 문법)

    먼저 특수문자 '^'와 '$'를 살펴봅시다. 이 문자의 역할은 문자열의 시작과 끝을
    의미합니다. 다음과 같은 해당 예를 들 수 있습니다.

    "^The": "The"로 시작하는 문자열 "of despair$": "of despair"로 끝나는 문자열
    "^abc$": "abc"로 시작하고 "abc"로 끝나는 문자열 ("abc" 라는 문자열도 해당됨)
    "notice": "notice"가 들어 있는 문자열

    마지막 예제에서 보듯이 이 두 개의 특수문자가 없는 패턴은 검사대상이 되는
    문자열에 어떤 위치에서든지 들어 있음 의미합니다.

    특수문자로는 '*', '+', '?'도 있습니다. 이 문자들은 어떤 문자의 반복에 관한
    지정을 해주는 문자입니다. 각각 '0또는 그 이상', '1또는 그 이상', '0또는 1'을
    의미합니다. 여기에 몇 가지 예제가 있습니다.

    "ab*": a뒤에 0 이상의 b가 있는 문자열 ("a", "ab", "abbb", 등); "ab+": 위와 동일
    하지만 최소한 하나 이상의 b가 있어야 함 ("ab", "abbb", 등); "ab?": b가 하나 있을
    수도 있고 없을 수도 있음 (ab 또는 a) "a?b+$": a가 있을 수도 있고 없을 수도
    있으며 그뒤에 하나 이상의 b로 끝나는 문자열

    { }를 사용하면 반복되는 수를 영역으로 지정할 수 있습니다.

    "ab{2}": a뒤에 2개의 b가 있는 문자열 ("abb"); "ab{2,}": a뒤에 최소한 2개 이상의
    b가 있는 문자열 ("abb", "abbbb", 등.); "ab{3,5}": a뒤에 3개에서 5개 사이의 b가
    있는 문자열 ("abbb", "abbbb", 또는 "abbbbb").

    { }를 사용할 대는 반드시 첫 번째 숫자는 적어야 됨을 유의합니다. ((O) "{0,2}",
    (X) "{,2}"). 또한 '*', '+', '?'는 각각 "{0,}", "{1,}", "{0,1}"와 같습니다.

    이제 ()를 사용해서 하나의 문자가 아닌 여러 문자를 지정하는 방법을 알아봅니다.

    "a(bc)*": a 뒤에 "bc"가 0또는 그이상의 수만큼 있는 문자열 "a(bc){1,5}": a 뒤에
    "bc."가 1에서 5번 들어 있는 문자열

    또 다른 특수문자로는 OR 연산을 하는 '|'를 들 수 있습니다.

    "hi|hello": "hi"나 "hello"가 들어 있는 문자열 "(b|cd)ef": "bef" 또는 "cdef"
    "(a|b)*c": a와 b가 섞여서 여러번 나타나고 그뒤에 c가 붙어있는 패턴

    '.' (period)는 어떤 한 문자를 의미합니다.

    "a.[0-9]": a뒤에 한 문자와 숫자가 붙어 있는 패턴 "^.{3}$": 3문자로만 되어 있는
    문자열

    []표현은 문자열의 해당 위치에 사용될 수 있는 문자를 표현하는데 사용합니다.

    "[ab]": a또는 b ("a|b"와 동일한 표현); "[a-d]": 소문자 'a'에서 'd'까지
    ("a|b|c|d"또는 "[abcd]"와 동일); "^[a-zA-Z]": 영문자로 시작하는 문자열 "[0-9]%":
    % 문자 앞에 하나의 문자가 붙어 있는 패턴 ",[a-zA-Z0-9]$": 영문자, 숫자로 끝나는
    문자열 패턴

    []에서 '^'를 표현의 가장 처음에 사용하면 나타나서는 안 되는 문자를 지정할 수
    있습니다. (예> "%[^a-zA-Z]%" 두 % 사이에 영문자가 없는 패턴)

    "^.[$()|*+?{"같은 특수 문자는 백슬레쉬('')를 사용해서 escape될 수 있습니다( 역자
    주 : escape 이란 다른 말로 literal로 탈출한다라고 할 수 있습니다 즉 특수문자로
    인식되지 않고 일반 문자로 인식되게 합니다). 사용하는 관점에서 보면 백슬레쉬도
    PHP3의 문자열에서 escape되어야 하기 때문에 예를 들어 "($|?[0-9]+"같은
    정규표현식은 ereg("(\$|?[0-9]+", $str) 와 같이 사용됩니다 (이 표현식은 무얼
    검사하는 걸까요? ^^;(이건 역자가 한 말이 아닙니다))

    하지만 []안에서는 특수문자가 모두 효력을 읽게 되기 때문에 이 법칙을 벗어남을
    기억하세요 []안에서는 백슬레쉬를 포함한 모든 특수문자들이 그 힘을 읽습니다
    (예> "[*+?{}.]"는 말그대로 '*', '', '+', '?', '{', '}', '.' 문자를 의미합니다.
    그리고 regex man 페이지에 나오듯이 ']'문자 자체를 포함하려면 문자들 리스트의 첫
    번째에 위치시킵니다('^'가 있으면 '^'뒤에). '-'를 포함하려면 첫 번째 또는
    마지막 문자로 지정하고 '-'문자가 영역의 경계 (예> a에서 -까지)일 경우 영역지정
    문자의 두 번째 경계로 지정([a--])합니다.

    완벽한 설명을 하려면 대조 순서(collating sequences), 문자 클래스(character
    classes), 동일 클래스(equivalence classes)에 대해서도 다루어야 하지만 이
    글에서는 별 상관관계가 없기 때문에 regex man 페이지를 참고하도록 합니다.

    -Validating Money Strings (금액 문자열 검사하기)

    ok 이제 우리는 여기서 배운 것을 뭔가 실질적인 것에 적용 시켜봅시다. 사용자가
    입력한 금액을 검사하는 정규표현식에 대해 알아봅니다. 금액은 "10000.00" 와
    "10,000.00", 와, 센트 없이, "10000" 와 "10,000" 이렇게 4가지 방법으로
    사용됩니다. (역자주 : 달러와 센트 군요 ?,.?)

    다음 정규표현식을 기초로 시작해 봅시다.

    ^[1-9][0-9]*$

    이 정규표현식은 0으로 시작하지 않는 어떠한 수인지를 검사합니다. 하지만 "0"도
    통과되지 못합니다. 그래서 다음과 같이 수정합니다.

    ^(0|[1-9][0-9]*)$

    말로 표현하면 "0 이거나 0으로 시작하지 않는 수"입니다. 이제 수 앞에 -부호도
    사용할 수 있게 수정해 봅니다.

    ^(0|-?[1-9][0-9]*)$

    이 뜻은 "0 이거나 -이 있을 수 있는 수이고 이 수는 0으로 시작하지 않는다"입니다.
    이제 좀 느슨하게 하고 유저가 0으로 시작하는 수도 입력할 수 있도록 해봅니다.
    금액에 필요없는 -부호도 없애버립니다. 그리고 선택사항인 소수점 부분 패턴도
    넣어서 다음 정규표현식이 나옵니다.

    ^[0-9]+(.[0-9]+)?$

    하이라이트된 부분은 소수점(.)이 항상 최소한 하나이상의 수와 붙어 있어야 함을
    의미합니다. 그러므로 예를 들면 "10."은 통과되지 못하고 "10" 과 "10.2"는
    통과합니다.

    ^[0-9]+(.[0-9]{2})?$

    이제 소수점 뒤에 반드시 2개의 수가 붙어 있어야 합니다. 이게 너무 심하다 싶으면
    다음과 같이 해서

    ^[0-9]+(.[0-9]{1,2})?$

    소수점 뒤에 하나의 숫자만 올 수도 있게 합니다. 이제 1000단위를 구분하는 ','를
    표현해 봅니다.

    ^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

    "1~3개의 숫자와 그 뒤에 ','와 3개의 숫자로 이루어진 부분이 0개 또는 그 이상이
    붙어 있는 패턴". 쉽죠? 이제 ','도 선택사항(옵션:option)으로 만들어 봅니다.

    ^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$

    이게 전부입니다. 여기서 '+'를 '*'로 바꾸면 빈 문자열도 통과되는 패턴이 됩니다.
    함수호출할 때 백슬래쉬 문자 escape하는 것 (역자 : /를 //로) 잊지 마세요. 일단
    문자열이 검사되어 지면 str_replace("," , "" , $money) 함수로 ','를 없애버리고
    double로 형 변환을 해서 산술연산에도 사용할 수 있게 합니다.

    - Validating E-mail Addresses (E-mail 주소 검사하기)

    이제 e-mail 주소를 살펴봅시다. e-mail주소는 3부분으로 구성됩니다. : user
    명(@¿仕覺諮 있는 모든 것), \@\, 그리고 서버명(나머지 부분들) user명은 대문자
    또는 소문자와 숫자, '.' '-', '_'로 구성됩니다. '_'를 제외하면 서버명도
    마찬가지입니다. user 명은 .으로 시작하거나 끝나지 않습니다. domain명도
    마찬가지입니다. 또한 .이 연속으로 있을 수도 없고 . 사이에는 최소한 하나 이상의
    문자가 있어야 합니다. 이제 user명 부분을 검사하는 정규표현식을 만들어 봅시다.

    ^[_a-zA-Z0-9-]+$

    이 정규표현식은 아직 .을 지원하지 않습니다. 다음과 같이 수정합니다.

    ^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$

    말로 하면 "최소한 하나의 유효한 문자(valid character)와 그 뒤에 .과 유효문자들로
    구성된 부분이 0또는 그 이상이 있는 패턴"입니다.

    좀 간단하게 하기 위해 이 정규표현식을 ereg()대신에 eregi()함수에 사용합니다.
    eregi()함수는 대소문자를 구분하지 않기 때문에 "a-z"와 "A-Z"같이 두 개의 영역을
    지정하지 않아도 되는 이점이 있습니다.(둘 중 어떤 것이라도 상관없음)

    ^[_a-z0-9-]+(.[_a-z0-9-]+)*$

    서버명의 경우 '_'만 제외하고는 동일합니다. ^[a-z0-9-]+(.[a-z0-9-]+)*$

    이제 \@\를 중심으로 서로 붙여서 다음과 같이 만들어 냅니다.

    ^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$

    - 기타 사용

    Extracting Parts of a String (문자열의 일부분 잘라내기)

    ereg()와 eregi()함수는 문자열에서 패턴에 해당되는 부분을 잘라내는 기능이
    있습니다. (메뉴얼 참고) 예를 들면 path/URL 문자열에서 파일명을 잘라내고 싶은
    경우 다음과 같은 코드가 필요할 것입니다.

    ereg("([^\/]*)$", $pathOrUrl, $regs); echo $regs[1];

    Advanced Replacing (치환의 발전된 형태)

    ereg_replace() 와 eregi_replace()는 아주 유용한 함수입니다. 문자열에 있는 모든
    문자를 ','로 구분한다고 가정해 봅시다. 다음과 같이 할 수 있습니다. (역자 :
    trim()함수는 문자열의 앞과 뒤에 있는 공백문자를 모두 제거하는 함수)

    ereg_replace("[ nrt]+", ",", trim($str));

    - Some exercises (연습문제)

    여기 당신을 좀 바쁘게 할 만한 것들이 있습니다 (^^

    1. 여기 나온 email 검사 정규표현식의 서버 부분을 최소한 두 개의 이름으로
    구성되어야 하게 수정하시오 (hint : 단 하나의 문자만 변경하면 됨) 2.
    trim()기능을 하는 ereg_replace()함수호출을 하시오 3. '#', \@\, '&', '%'를 '~'로
    수정하는 ereg_replace()함수호출을 하시오

    Have fun!

    출처 : www,phpbuilder.com 원문 : Dario F. Gomes (dario@who.net) 1999/06/16 번역
    : 허련호 (rhheo@hanmail.net) 2001/01/30


    [수정]

    답장 EzDoum 2004년 02월 16일 오후 09:11 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
    정규 표현식 library, RegExLib
    여러 정규 표현식(Regular Expression)를 보유하고 있는 곳. 실제 사용 예도 보여주고 있어, 그 표현식을 이해를 돕고 있다. 표현식 표도 제공
    http://www.regxlib.com/

    정규 표현식 테스팅, Regexp Tester
    정규 표현식(regular expression) 매칭을 테스팅할 수 있는 PHP 스크립트이다. PHP 소스를 제공하며 웹에서 테스트할 수 있다.
    http://www.bitesizeinc.net/project/regexper
    [수정]

    답장 EzDoum 2004년 02월 18일 오전 12:38 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
    정규 표현식 강좌 - wiki
    html링크를 뽑아내는 정규표현식을 순차적으로 만들어감. 복잡한 정규 표현식을 만들어가는 과정이 잘 설명됨

    규칙
    강좌
    LinuxStart에서한 강좌
    정규표현식에 대해 알아 보자(1)
    정규표현식에 대해 알아 보자(2)
    정규표현식에 대해 알아 보자(3)
    알려진 기술
    정규 표현식 완전 해부와 실습
    HTML 테그에 매체하기
    HTML 링크 만들기
    HTML 링크의 세부사항 검사
    HTTP URL 검사
    HOST 이름 확인
    텍스트에서 URL을 추출하는 방법

    http://baramai.com/dbwiki/index.php/RegExpr
    [수정]

    답장 EzDoum 2004년 02월 18일 오전 12:41 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
    정규표현식을 사용해보자 - 미병님의 노하우 ^^
    boost 라이브러리의 RegEx++로 정규 표현식 사용하는 예

    http://madchick.egloos.com/284231

    위의 본문중에 인용한 몇가지 링크 모음

    자바 스크립트에서 정규표현식을 사용하는 방법은 아래 링크를 참조..
    http://devedge.netscape.com/library/manuals/2000/javascript/1.3/guide/regexp.html

    VB 스크립트 혹은 VB에서 정규표현식을 사용하는 방법은 아래 링크에..
    http://www.egocube.pe.kr/asp_0003.asp

    정규표현식 테스터
    http://www.vbcity.com/pubs/article.asp?alias=regexp

    c++에서 정규표현식 사용하기
    http://www.codeproject.com/cpp/rexsearch.asp?target=regular%7Cexpression

    나머지는 그냥 참고해볼만 합니다..
    http://codeguru.earthweb.com/string/regexp.shtml
    http://codeguru.earthweb.com/string/reg_ex.shtml
    http://www.codeproject.com/string/cperlstring.asp?target=regular%7Cexpression
    http://www.codeproject.com/string/Regex__.asp
    [수정]

    답장 EzDoum 2004년 02월 18일 오전 12:58 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
    javascript에서 사용하는 정규 표현식 예..

    var reDigit = /^\d+$/
    var reBnji = /^\d+(\-\d+)?$/
    var reEngName = /^[a-zA-Z. ]+$/
    var reSignedInteger = /^[+|-]?\d+$/
    var reInteger = /^\d+$/
    var reAlphabetic = /^[a-zA-Z]+$/
    var reAlphanumeric = /^[a-zA-Z0-9]+$/
    var reEmail = /^.+\@.+\..+$/

    그리고 정규 표현식을 사용한 폼 자동 검사
    client-side 폼 체크를 input테그의 속성으로 정의하여, 간단하게 정리 할 수 있는 예 입니다. 훌륭합니다 !!
    http://www.ezdoum.com/upload/lib.validate.js
    [수정]

    GNU REGEX (정규표현식) 프로그래밍 강좌 | 답장: 7개 | 본문에 답장
    정렬 :  

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

    검색
    Google

    분류
    ·공지 (6)
    ·인터넷 (87)
    ·하드웨어 (260)
    ·C/C++ (65)
    ·어셈블리 (7)
    ·리눅스 (136)
    ·리눅스 커널 (67)
    ·윈도우즈 (25)
    ·데이터베이스 (20)
    ·보안 (16)
    ·.NET (25)
    ·그래픽 (13)
    ·책소개 (42)
    ·호기심 천국 (80)
    ·잡담 (111)
    ·사랑 (3)

    전체 본문수: 963
    전체 답장수: 525


    분류 : 리눅스
    최근글
    최근글
    가장 많이 읽은 글
    ·멀티쓰레드(Pthread) 프로그래밍 (0)
    뜨거운 감자
    ·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)

    EzDoum투표
    이지도움 어때요?
    이게 뭐야. 다시 안올란다. --;
    아이 좋아라~ +_+;
    관심없다.
    먼가는 있는거 같은데 뭐하는 곳이지?
    기타 (자유게시판에 글로 남겨 주세요)
    [ 결과 | 투표 ]

    랜덤 링크
    http://kldp.net


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