정규표현식




1. 정규 표현식 #

taiga_exp.png
[PNG image (20.97 KB)]


2. 기본 문법 #

2.1. 한 장으로 보는 정규표현식 #

펼치기

3. 사용례 #

3.1. HTML 태그 매치 #

Perl
<("[^"]*"|'[^']*'|[^'">])*>

3.2. HTML 링크 추출 #

Perl
while($Html =~ m{<a/b([^>]+)>(.*?)</a>}ig)
{
    my $Guts = $1;
    my $Link = $2;

    if($Guts =~ m{
        /b HREF     # "href" 속성
        /s* = /s*   # "="의 앞
        (?:     # 값은
          "([^"]*)" #   큰 따옴표로 감싼 문자열
          |     # 또는
          '([^']*)' #   작은따옴표로 감싼 문자열
          |     # 또는
          ([^'">/s]+)   # "기타 문자"
        )
        }xi)
    {
    my $Url = $+;
    print $Url with link text: $Link\n";
    }
}


3.3. IP 주소 #

Perl
^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5]\.
    ([01]?\d\d?[2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$

# 유니코드 환경에서는 \d 가 ASCII 숫자가 아닌 문자에도 매치될 수 있다.
# 이 경우 [0-9] 를 사용.

3.4. CSV 파일 파싱 #

※ 마이크로소프트 스타일의 CSV 형식
Perl
while($line =~ m{
    (?:^|,)
    (?:
        "
        ((?:[^"]|"")*)
        "
    |
        ([^",]*)\
    )
    }gx)
{
    if(defined $2) {
        $filed = $2;
    } else {
        $filed = $1;
        $filed =~ s/""/"/g;
    }
    print "[$filed]"; # 디버깅을 위해 필드를 출력한다.
}

3.5. E-MAIL 매치 #

C++
string email = "[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}";

3.6. 두 개 이상의 공백을 하나로 치환 #

PHP
$description = preg_replace("/(\s){2,}/", '$1', $description);

4. 각 언어별 용례 #

5. 기타 #

5.1. 한글(UTF-8) 적용 #

*이 코드는 유니코드 환경에서만 유효하다. 따라서 euckr로 인코딩 된 구문에서는 동작하지 않는다.

앨범 2000
----
$1; # '앨범'
$2; # '2000'

5.2. 수량자 #

정규표현식에는 탐욕적 수량자(Greedy Quantifier)와 게으른 수량자(Lazy Quantifier)가 있다. 탐욕적 수량자는 가능한 큰 블록를 찾으려고 하고(예:.+) 작은 블록을 찾으려면 게으른 수량자를 사용한다. (예:.+?)

5.3. 온라인 테스터 #

http://www.regexr.com/
http://regex101.com/ 매치된 것도 보여준다.

6. 링크 #

http://blog.outsider.ne.kr/360 알고 있어야 할 8가지 정규식 표현 from nettuts+


이 글에는 0 개의 댓글이 있습니다.