#keywords 정규표현식 [[TableOfContents]] == 정규 표현식 == attachment:taiga_exp.png == 기본 문법 == === 한 장으로 보는 정규표현식 === {{{#!folding 펼치기 attachment:regular-expressions-cheat-sheet-v2.png }}} == 사용례 == === HTML 태그 매치 === Perl {{{#!vim perl <("[^"]*"|'[^']*'|[^'">])*> }}} === HTML 링크 추출 === Perl {{{#!vim perl while($Html =~ m{]+)>(.*?)}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"; } } }}} === IP 주소 === Perl {{{#!vim 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] 를 사용. }}} === CSV 파일 파싱 === ※ 마이크로소프트 스타일의 CSV 형식 Perl {{{#!vim perl while($line =~ m{ (?:^|,) (?: " ((?:[^"]|"")*) " | ([^",]*)\ ) }gx) { if(defined $2) { $filed = $2; } else { $filed = $1; $filed =~ s/""/"/g; } print "[$filed]"; # 디버깅을 위해 필드를 출력한다. } }}} === E-MAIL 매치 === C++ {{{#!vim cpp string email = "[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}"; }}} === 두 개 이상의 공백을 하나로 치환 === PHP {{{#!php $description = preg_replace("/(\s){2,}/", '$1', $description); }}} == 각 언어별 용례 == === C++0x === || ["C++/(C++0x)정규표현식"] || == 기타 == === 한글(UTF-8) 적용 === {{{#!gcode if ($line =~ m/(?<=[^가-힣])([^\s]*)\s(\d+)(?=[^가-힣])/) { }}} *이 코드는 유니코드 환경에서만 유효하다. 따라서 euckr로 인코딩 된 구문에서는 동작하지 않는다. ---- {{{ 앨범 2000 ---- $1; # '앨범' $2; # '2000' }}} === 수량자 === 정규표현식에는 탐욕적 수량자(Greedy Quantifier)와 게으른 수량자(Lazy Quantifier)가 있다. 탐욕적 수량자는 가능한 큰 블록를 찾으려고 하고(예:.+) 작은 블록을 찾으려면 게으른 수량자를 사용한다. (예:.+?) === 온라인 테스터 === [http://www.regexr.com/] [http://regex101.com/] 매치된 것도 보여준다. == 링크 == http://blog.outsider.ne.kr/360 알고 있어야 할 8가지 정규식 표현 from nettuts+ ---- CategoryDocument