본문 바로가기

Common Gateway Interface/Perl

[옛 강좌] 05. Perllang - 펄 기초 문법 3

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 이 게시물은 지금은 폐쇄되어 접속되지 않는 Kim Young Soo(http://hours.interpia98.net/~unisoo/)님의 웹 사이트에 2001년경 게시된 내용을 바탕으로 오늘날 웹 환경에 맞게 내용을 덧붙였습니다.

Perllang - 펄 기초 문법 3

Description

정규 표현, 매칭, 대치


정규 표현(Regular expression)

 정규 표현(regular expression)은 일반화된 문자열을 설명하기 위한 규칙의 집합입니다.

 어떤 문자열이 정규 표현의 규칙을 따르고 있다면, 그 정규 표현은 그 문자열을 매치(match)한다고 합니다.

 예를 들면, 정규표현 'b.'는 문자열 'observe, body, abc'와는 매치를 이루고, 'b, Bell, Bob' 와는 매치하지 않습니다. 이 표현 'b.'는 '소문자 b가 문자열 내에 있어야 하며, 다른 문자가 뒤에 한 개 이상 있어야 하기(단,\n는 예외)' 때문입니다.

펄에서는 많은 정규 표현들이 있는데, 그것들을 정리해 보았습니다.

1. 정규표현 어써션(Assertions)

기호매치 영역매치매치함매치안함
'^'문자열의 시작부분^foolfoolishtomfoolery
'$'문자열의 끝 부분fool$April foolfoolish
'\b'단어 영역be\bsidebe sidebeside
'\B'비단어 영역be\Bsidebesidebe side

덧붙임. 위 표에 대한 내용 추가

기호매치 영역정규식의 예의미정규식을 만족하는 문자열의 예정규식을 만족하지 않는 문자열의 예
^문자열의 시작부분^foolfool로 시작하는 모든 문자열foolish (fool-로 시작함)tomfoolery (fool-로 시작하지 않음)
$문자열의 끝 부분fool$fool로 끝나는 모든 문자열April fool (-fool로 끝남)foolish (-fool로 끝나지 않음)
\b단어 영역 (단어와 단어 사이의 구분자 역할)be\b 앞뒤로 띄어쓰기되어 분리된 단어 "be" side be side beside
\B비단어 영역be\Bside 띄어쓰기되지 않은 단어 "be" besidebe side

2. 정규표현 아톰(Atoms)

기호매치 영역매치함매치안함
'Period(.)'새로운 라인을 제외한 어떤 문자b.bbobbb
'[]'[]내의 문자 중에 하나^[Bb]Bob, bobRbob
'()'()내에 정규표현이 매치하는 것^a(b.b)c$abobcabbc

3. 정규표현 아톰 퀀티파이어(Quantifiers)

기호매치 영역매치함매치안함
'*'없거나 하나 이상ab*cac, abcabb
'+'하나 이상ab+cabcac
'?'없거나 하나ab?cac, abcabbc
'{n}'n개 만큼ab{2}cabbcabbbc
'{n, }'적어도 n개 만큼ab{2,}cabbc, abbbcabc
'{nm}'적어도 n개, 많아야 m개ab{2,3}cabbc, abbbcabbbbc

4. 특수문자(Special Characters)

기호매치 영역매치함매치안함
'\d'숫자b\ddb4dbab
'\D'비숫자b\Ddbadb4d
'\n'새 라인(줄바꿈)
'\r'캐리지 리턴
'\t'
'\f'폼 피드
'\s'공백 문자
'\S'비공백 문자
'\w'알파벳이나 숫자a\wba2ba^b
'\W'알파벳이나 숫자를 제외한 문자a\Wbaa^baabb

 휴~~~ 소스들을 보면 이런 표현들이 매우 복잡하게 사용되 되죠. 매칭 작업과 대치 작업에 매우 유용하게 쓰입니다.


매 칭(Matching)

 위의 표현들은 펄 프로그래밍시 매우 많이, 그리고 매우 유용하게 쓰입니다. 보통 매치 연산자는 두개의 '/'로 둘러싸인 정규표현으로 구성됩니다. 그리고 특수연산자 '=~'는 첫번째 값과 두번째 값이 매치하는지에 따라 참과 거짓으로 평가 합니다.

예)

$filename =~ /dat$/ && die "Can't use. dat files. \n";

 이 예의 뜻은 만약 $filename의 끝 문자열이 'dat'로 끝나지 않는다면 'die ~ '해라라는 뜻이 됩니다.

 연산자 '!~'는 '=~'의 반대개념입니다.

예)

$ENV{'PATH'} !~ /perl/ && warn "Not sure if perl is in your path...";

 perl의 경로가 $ENV{'PATH'}와 매치되지 않는다면.... 의 뜻이 됩니다.


대 치(Substitution)

 대치는 쉬우면서 강력한 기능을 제공합니다. 대치 연산자는 '/.../.../' 를 사용합니다. 첫번째와 두번째 '/'에 대치될 패턴이 오게되고, 두번째와 세번째 '/'에 대치할 패턴이 오게 됩니다.

예)

$name = "Kimyoungsoo"; $name = s/Kim/Unicorn/;

 $name의 'Kim'을 'Unicorn'으로 대치하게 됩니다.


이 문서는 Perl 패키지내의 pod2html를 이용하여 만들었습니다. - Kim Young Soo