이 게시물은 지금은 폐쇄되어 접속되지 않는 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)
기호 | 매치 영역 | 매치 | 매치함 | 매치안함 |
---|---|---|---|---|
'^' | 문자열의 시작부분 | ^fool | foolish | tomfoolery |
'$' | 문자열의 끝 부분 | fool$ | April fool | foolish |
'\b' | 단어 영역 | be\bside | be side | beside |
'\B' | 비단어 영역 | be\Bside | beside | be side |
덧붙임. 위 표에 대한 내용 추가
기호 | 매치 영역 | 정규식의 예 | 의미 | 정규식을 만족하는 문자열의 예 | 정규식을 만족하지 않는 문자열의 예 |
---|---|---|---|---|---|
^ | 문자열의 시작부분 | ^fool | fool로 시작하는 모든 문자열 | foolish (fool-로 시작함) | tomfoolery (fool-로 시작하지 않음) |
$ | 문자열의 끝 부분 | fool$ | fool로 끝나는 모든 문자열 | April fool (-fool로 끝남) | foolish (-fool로 끝나지 않음) |
\b | 단어 영역 (단어와 단어 사이의 구분자 역할) | be\b | 앞뒤로 띄어쓰기되어 분리된 단어 "be" | side be side | beside |
\B | 비단어 영역 | be\Bside | 띄어쓰기되지 않은 단어 "be" | beside | be side |
2. 정규표현 아톰(Atoms)
기호 | 매치 영역 | 예 | 매치함 | 매치안함 |
---|---|---|---|---|
'Period(.)' | 새로운 라인을 제외한 어떤 문자 | b.b | bob | bb |
'[]' | []내의 문자 중에 하나 | ^[Bb] | Bob, bob | Rbob |
'()' | ()내에 정규표현이 매치하는 것 | ^a(b.b)c$ | abobc | abbc |
3. 정규표현 아톰 퀀티파이어(Quantifiers)
기호 | 매치 영역 | 예 | 매치함 | 매치안함 |
---|---|---|---|---|
'*' | 없거나 하나 이상 | ab*c | ac, abc | abb |
'+' | 하나 이상 | ab+c | abc | ac |
'?' | 없거나 하나 | ab?c | ac, abc | abbc |
'{n}' | n개 만큼 | ab{2}c | abbc | abbbc |
'{n, }' | 적어도 n개 만큼 | ab{2,}c | abbc, abbbc | abc |
'{nm}' | 적어도 n개, 많아야 m개 | ab{2,3}c | abbc, abbbc | abbbbc |
4. 특수문자(Special Characters)
기호 | 매치 영역 | 예 | 매치함 | 매치안함 |
---|---|---|---|---|
'\d' | 숫자 | b\dd | b4d | bab |
'\D' | 비숫자 | b\Dd | bad | b4d |
'\n' | 새 라인(줄바꿈) | |||
'\r' | 캐리지 리턴 | |||
'\t' | 탭 | |||
'\f' | 폼 피드 | |||
'\s' | 공백 문자 | |||
'\S' | 비공백 문자 | |||
'\w' | 알파벳이나 숫자 | a\wb | a2b | a^b |
'\W' | 알파벳이나 숫자를 제외한 문자 | a\Wb | aa^b | aabb |
휴~~~ 소스들을 보면 이런 표현들이 매우 복잡하게 사용되 되죠. 매칭 작업과 대치 작업에 매우 유용하게 쓰입니다.
매 칭(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
'Common Gateway Interface > Perl' 카테고리의 다른 글
[옛 강좌] 07. Perlfunc - 펄 함수 2 (0) | 2015.04.29 |
---|---|
[옛 강좌] 06. Perlfunc - 펄 함수 1 (0) | 2015.04.29 |
[옛 강좌] 04. Perllang - 펄 기초 문법 2 (0) | 2015.03.28 |
[옛 강좌] 03. Perllang - 펄 기초 문법 1 (0) | 2015.03.28 |
[옛 강좌] 02. Perlstart - 윈도용 펄 사용법 (0) | 2015.03.28 |