정규표현식(Regular Expression)
정규표현식
- 문자열을 추상적으로 표현하는 방법
- 복잡한 패턴의 문자열에서 원하는 정보를 얻어낼 수 있는 강력한 도구
Perl의 정규표현식
- 정규표현식이 내장되어 지원이 완벽하다
정규표현식 (메타기호) |
설명 |
예제 |
. |
임의의 한 문자 |
a.ple = apple(o), alple(o), aplle(x) |
| |
| 기호를 기준으로 앞뒤의 값들 중의 하나 선택 |
Gr(a|e)y = gray or grey로 둘 중 하나에 매치된다 |
? |
|
Apples? Apple(o), apples(0) |
* |
|
Apple* = appl(o), appleeeee(o) |
+ |
|
Apple+ = appl(x), apple(o), appleeee(o) |
( ) |
( )는 정규식내에서 패턴을 그룹화 할 때 사용 |
(apple)* = apple(o), appleapple(o), appleappleapple(o) |
{n} |
|
A.{3}e = apple(o), Abcde(o), AAAAA(x), AAAAe(o) |
{n,} |
|
Ap{2,}le = apple(o), Appple(o), Aple(x), Apble(x) |
{n,m} |
|
s.{3,4}ing = sleeping(o), shopping(o), swimming(o) |
[ ] |
|
[ 0 2 4 6 8 ] = 0, 2, 4, 8중의 하나를 찾는다 |
^, - |
문자 클래스 안의 특수문자 -문자는 최초의 문자열과 마지막 문자열을 모두 명시 ^문자 뒤에 나오는 조건을 만족하지 않는 문자를 찾는다 |
[ a - z ] = a에서 z까지의 모든 문자를 찾는다 [ ^a-z ] = a에서 z까지의 문자를 제외한 문자를 뜻한다. |
패턴 매칭
Pattern Matching
- 문자열의 형식이 일치하는 것을 조사
- 패턴은 /문자로 비교하고자 하는 문자열을 감싸서 표현한다
문자 |
설 명 |
=~ |
문자열의 패턴이 일치하는 것이 있다면 참을 반환 |
!~ |
문자열의 패턴이 일치하는 것이 있을 때 거짓을 반환 |
특수문자 |
String Class |
Comment |
\w |
[ 0-9a-zA-Z_] |
숫자, 영문자(대, 소문자),_언더바 |
\W |
[^0-9a-zA-Z_] |
숫자, 영문자(대, 소문자),_언더바) 이외 |
\s |
[\t\n\r\f] |
공배(스페이스, 탭, 개행) |
\S |
[^\t\n\r\f] |
공백 이외의 숫자 |
\d |
[ 0-9 ] |
숫자 |
\D |
[^[0-9] |
숫자 이외의 문자 |
특수문자 |
설명 |
$& |
매치하는 문자열 전체 |
$`(Grave Accent) |
매치하는 부분보다 앞에 있는 문자열 |
$`(Single Quotation) |
매치하는 부분보다 뒤에 있는 문자열 |
$1, $2, $3 .. |
첫번째, 두 번째, 그룹에 매치하는 문자열 |
$+ |
마지막 그룹에 매치하는 문자열 |
정규 표현식을 사용하여 문자열을 검색
- 매치연산자를 이용하여 검색
- 복수의 옵션을 설정하는 것도 가능
/g |
|
/i |
대소문자를 구별하지 않음 |
/x |
공백을 무시하며 주석을 허용 |
/m |
^와 $이 \n 다음에도 매치되도록 함 |
/s |
.연산자가 \n을 인식할수 있게해줌 |
/m 옵션중 세부적인 연산자
연산자 |
설 명 |
^or \A |
스트링의 시작에서만 일치시킨다. |
$ or \Z |
스트링의 끝에서만 일치시킨다 |
\b |
단어 단위로만 일치시킨다 |
\B |
단어 안에서 일치시킨다 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | while(1){ print "이름을 입력하세요(5글자) : ";chomp($name=<>); $a=$name =~ /^[^\d~!@#$%^&*()_+]{1,10}$/; print $len; if($a){ print "이름을 입력했습니다\n"; last; }else{ print "양식이 올바르지 않습니다!.\n"; } } while(1){ print "전화 번호를 입력하세요(숫자만 - 제외 ) : ";chomp($num=<>); $a=$num =~ /^01[0,1,6,7,8,9][0-9]{3,4}[0-9]{4}$/; if($a){ print "전화번호를 입력했습니다.\n"; last; }else{ print "전화번호 정보가 올바르지 않습니다!.\n"; } } while(1){ print "이메일을 입력해라 : ";chomp($mail=<>);; $a=$mail =~ /^\w{1,}@[a-zA-Z]+(\.[a-zA-Z]+){1,2}$/; if($a){ print "이메일 정보를 입력했습니다.\n"; last; }else{ print "이메일 정보가 올바르지 않습니다.\n"; } } print "<< 입력된 정보 >>\n"; print "이름 :\t$name\nh.p :\t$num\nmail :\t$mail\n" | cs |