1. 서울시 마포구 상암동 누리꿈스퀘어 연구개발타워 1111호 _ 070.7450.6572 _ dev@jellycoaster.com
Regular
Expression
Jellycoaster Inc.
Dev.team
2. 목차
I. Regular Expression?
II. 기본 정보
III. 캐릭터 클래스
IV. 메타클래스 (, )
V. 반복 매치
VI. 예제
서울시 마포구 상암동 누리꿈스퀘어 연구개발타워 1111호 _ 070.7450.6572 _ dev@jellycoaster.com
3. Regular Expression?
• 패턴을 묘사하는 문자열
• 특정한 규칙을 표현하기 위한 형식 언어
• 문자열을 검색하거나, 주어진 문자열에서 원하는
부분을 추출하거나, 검색 및 치환을 하는 데 사용된다.
I
2013 Jellycoaster Inc. Dev.team
5. Metacharacter
정규식 표기에 사용되도록 예약 된 문자들
{}[]()^$.|*+?
메타캐릭터를 정규식에서 일치시킬 때는
앞에 백슬래쉬를 붙인다.
2013 Jellycoaster Inc. Dev.team
6. Anchor
스트링의 ‘어느 지점’에 매치시킬지를 지정
^ : 스트링의 시작
$ : 스트링의 끝, 또는 스트링의 끝 바로 앞의 “n”
^ 와 $ 가 동시에 쓰이면 스트링의 시작과
끝에 매치되어야 하므로, 정규식이 스트링
전체에 매치된다.
2013 Jellycoaster Inc. Dev.team
8. 캐릭터 클래스
• Description
• 캐릭터 클래스 내의 metacharacters
• 보편적으로 사용되는 캐릭터 클래스들에 대한 축약형
• Word anchor
III
2013 Jellycoaster Inc. Dev.team
9. Description
매치될 수 있는 하나 이상의 캐릭터들의 집합.
“cat” =~ /cat/
“bat” =~ /[bcr]at/
“cat” =~ /[bcr]at/
“rat” =~ /[bcr]at/
“item0” =~ /item[0123456789]/
...
“item9” =~ /item[0123456789]/
2013 Jellycoaster Inc. Dev.team
10. Metacharacters
캐릭터 클래스 내부에서 사용되는 특수
문자들
- : 범위 연산자. 클래스 제일 앞, 혹은 제일 뒤에 오면
일반문자 “-”
] : 캐릭터 클래스의 끝
: 이스케이프 시퀀스
^ : 네거티브 캐릭터 클래스. 클래스 제일 앞에 오면 대괄호
안에 있는 문자들을 제외한 모든 문자들을 의미
2013 Jellycoaster Inc. Dev.team
11. 축약형
보편적으로 사용되는 캐릭터 클래스의
축약형
d : [0-9]와 비로마권 스크립트에 있는 숫자
s : whitespace. [ trnf] 등
w : [0-9a-zA-Z_]와 비로마권 스크립트에 있는 문자
D : d 에 속하지 않는 문자들. [^d]
S : s 에 속하지 않는 문자들. [^s]
W : w 에 속하지 않는 문자들. [^w]
. : n 을 제외한 임의의 캐릭터 하나.
2013 Jellycoaster Inc. Dev.team
12. Word anchor
두 캐릭터 사이의 지점에 해당되는데, 이때 두
캐릭터 중 하나는 w 에, 다른 하나는 W 에
매치되는 곳
“Housecat catenates house and cat” =~ /cat/
“Housecat catenates house and cat” =~ /bcat/
“Housecat catenates house and cat” =~ /catb/
“Housecat catenates house and cat” =~ /bcatb/
2013 Jellycoaster Inc. Dev.team
13. Metacharacter (, )
• 그룹짓기, 계층적 매칭
• 매치된 부분 추출
IV
2013 Jellycoaster Inc. Dev.team
14. 그룹짓기, 계층적 매칭
정규표현식의 일부를 하나의 유닛으로 취급
/(ac|b)b/ # acb, bb 에 매치
/(^a|b)c/ # 문자열 시작지점에 있는 ac,에 매치되거나
위치에 관계 없이 bc 에 매치.
/house(cat(s|)|)/ # housecats, housecat, house 에 매치.
2013 Jellycoaster Inc. Dev.team
15. 매치된 부분 추출
각 괄호에 해당하는 값을 추출해낸다
$string = “12:34:56”;
$pattern = “(dd):(dd):((d)d)/”;
preg_match($pattern, $string, $matches);
echo $matches[1]; // 12
echo $matches[2]; // 34
echo $matches[3]; // 56
echo $matches[4]; // 5
2013 Jellycoaster Inc. Dev.team
16. 반복 매치
• Quantifier metachacter
• Greedy quantifier
• Non-greedy quantifier
V
2013 Jellycoaster Inc. Dev.team
17. Quantifier metacharacter
정규식의 특정 부분이 반복될 횟수를 지정
캐릭터, 캐릭터 클래스, 그룹의 바로 뒤에
명시
a? : ‘a’ 가 1회, 혹은 0회 매치
a* : ‘a’ 가 0회, 또는 그 이상 매치.
a+ : ‘a’ 가 1회, 또는 그 이상 매치.
a{n,m} : 최소 n 회, 최대 m 회 반복
a{n,} : 최소 n 회 이상 반복
a{n} : 정확히 n 회 반복
2013 Jellycoaster Inc. Dev.team
19. Non-greedy quantifier
일치하는 가장 짧은 문자열에 매치
a?? : ‘a’ 가 1회, 혹은 0회 매치. 0회를 먼저 시도
a*? : ‘a’ 가 0회, 또는 그 이상 매치. 가능한 한 최소로.
a+? : ‘a’ 가 1회, 또는 그 이상 매치. 가능한 한 최소로.
a{n,m}? : 최소 n 회, 최대 m 회 반복. 가능한 한 최소로.
a{n,}? : 최소 n 회 이상 반복. 가능한 한 최소로.
a{n}? : 정확히 n 회 반복. {n}과 동일하며, 표기법의
일관성을 위해 존재한다.
2013 Jellycoaster Inc. Dev.team
20. Greedy vs Non-greedy
$string = “The programming republic of perl”;
$greedy = “/^(.+)(e|r)(.*)$/”;
$non_greedy = “/^(.+?)(e|r)(.*)$/”;
preg_match($greedy, $string, $m_greedy);
preg_match($non_greedy, $string , $m_non_greedy);
m_greedy
[1] „The programming republic of pe‟
[2] „r‟
[3] „l‟
m_non_greedy
[1] „Th‟
[2] „e‟
[3] „ programming republic of perl‟
2013 Jellycoaster Inc. Dev.team
21. 예제
• 이메일
• 적어도 소문자 하나, 대문자 하나, 숫자 하나가
포함되어 있는 문자열
• 숫자
VI
2013 Jellycoaster Inc. Dev.team
23. 숫자 표시
/^
[+-]? * # 부호와 공백
( # 정수 또는 소수의 유효숫자부
d+ # a 로 시작하면서
(.d*)? # a.b 또는 a. 형태의 유효숫자
|.d+ #.b 형태의 유효숫자
)
([eE][+-]?d+)? # 추가적으로 올 수 있는 지수부
$/x
http://gypark.pe.kr/wiki/Perl/%EC%A0%95%EA%B7%9C
%ED%91%9C%ED%98%84%EC%8B%9D
2013 Jellycoaster Inc. Dev.team
24. 최소 하나의 대문자, 소문자, 숫자를
포함하는 문자열(8~15자)
/^
(?=.*d)
(?=.*[a-z])
(?=.*[A-Z])
.{8,15}
$/
http://appletree.or.kr/blog/notes/%EC%9E%90%EC%A3%
BC-%EC%93%B0%EC%9D%B4%EB%8A%94-
%EC%A0%95%EA%B7%9C%EC%8B%9Dregular-
expression-%EC%9C%A0%ED%98%95/
2013 Jellycoaster Inc. Dev.team