SlideShare ist ein Scribd-Unternehmen logo
1 von 26
서울시 마포구 상암동 누리꿈스퀘어 연구개발타워 1111호 _ 070.7450.6572 _ dev@jellycoaster.com
Regular
Expression
Jellycoaster Inc.
Dev.team
목차
I. Regular Expression?
II. 기본 정보
III. 캐릭터 클래스
IV. 메타클래스 (, )
V. 반복 매치
VI. 예제
서울시 마포구 상암동 누리꿈스퀘어 연구개발타워 1111호 _ 070.7450.6572 _ dev@jellycoaster.com
Regular Expression?
• 패턴을 묘사하는 문자열
• 특정한 규칙을 표현하기 위한 형식 언어
• 문자열을 검색하거나, 주어진 문자열에서 원하는
부분을 추출하거나, 검색 및 치환을 하는 데 사용된다.
I
2013 Jellycoaster Inc. Dev.team
기본 정보
• Metacharacters 예약된 문자들
• anchor
• 간단한 매칭
II
2013 Jellycoaster Inc. Dev.team
Metacharacter
정규식 표기에 사용되도록 예약 된 문자들
{}[]()^$.|*+?
메타캐릭터를 정규식에서 일치시킬 때는
앞에 백슬래쉬를 붙인다.
2013 Jellycoaster Inc. Dev.team
Anchor
스트링의 ‘어느 지점’에 매치시킬지를 지정
^ : 스트링의 시작
$ : 스트링의 끝, 또는 스트링의 끝 바로 앞의 “n”
^ 와 $ 가 동시에 쓰이면 스트링의 시작과
끝에 매치되어야 하므로, 정규식이 스트링
전체에 매치된다.
2013 Jellycoaster Inc. Dev.team
Simple Matching
“Hello World” =~ /world/
“Hello World” =~ /o W/
“Hello World” =~ /o/
“2+2=4” =~ /2+2/
“2+2=4” =~ /2+2/
“housekeeper” =~ /keeper/
“housekeeper” =~ /^keeper/
“housekeeper” =~ /keeper$/
문자 매칭
메타캐릭터
매칭
앵커
2013 Jellycoaster Inc. Dev.team
캐릭터 클래스
• Description
• 캐릭터 클래스 내의 metacharacters
• 보편적으로 사용되는 캐릭터 클래스들에 대한 축약형
• Word anchor
III
2013 Jellycoaster Inc. Dev.team
Description
매치될 수 있는 하나 이상의 캐릭터들의 집합.
“cat” =~ /cat/
“bat” =~ /[bcr]at/
“cat” =~ /[bcr]at/
“rat” =~ /[bcr]at/
“item0” =~ /item[0123456789]/
...
“item9” =~ /item[0123456789]/
2013 Jellycoaster Inc. Dev.team
Metacharacters
캐릭터 클래스 내부에서 사용되는 특수
문자들
- : 범위 연산자. 클래스 제일 앞, 혹은 제일 뒤에 오면
일반문자 “-”
] : 캐릭터 클래스의 끝
 : 이스케이프 시퀀스
^ : 네거티브 캐릭터 클래스. 클래스 제일 앞에 오면 대괄호
안에 있는 문자들을 제외한 모든 문자들을 의미
2013 Jellycoaster Inc. Dev.team
축약형
보편적으로 사용되는 캐릭터 클래스의
축약형
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
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
Metacharacter (, )
• 그룹짓기, 계층적 매칭
• 매치된 부분 추출
IV
2013 Jellycoaster Inc. Dev.team
그룹짓기, 계층적 매칭
정규표현식의 일부를 하나의 유닛으로 취급
/(ac|b)b/ # acb, bb 에 매치
/(^a|b)c/ # 문자열 시작지점에 있는 ac,에 매치되거나
위치에 관계 없이 bc 에 매치.
/house(cat(s|)|)/ # housecats, housecat, house 에 매치.
2013 Jellycoaster Inc. Dev.team
매치된 부분 추출
각 괄호에 해당하는 값을 추출해낸다
$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
반복 매치
• Quantifier metachacter
• Greedy quantifier
• Non-greedy quantifier
V
2013 Jellycoaster Inc. Dev.team
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
Greedy quantifier
수량자들은 기본적으로 전체 정규식 매치가
성공할 수 있는 선에서, 가능한 가장 긴
문자열에 매치된다.
2013 Jellycoaster Inc. Dev.team
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
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
예제
• 이메일
• 적어도 소문자 하나, 대문자 하나, 숫자 하나가
포함되어 있는 문자열
• 숫자
VI
2013 Jellycoaster Inc. Dev.team
이메일
/^
[_a-z0-9-]+
(.[_a-z0-9-]+)*
@
[a-z0-9-]+
(.[a-z0-9-]+)*
(.[a-z]{2,4})
$/
간단하고 보편적인 예제.
2013 Jellycoaster Inc. Dev.team
숫자 표시
/^
[+-]? * # 부호와 공백
( # 정수 또는 소수의 유효숫자부
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
최소 하나의 대문자, 소문자, 숫자를
포함하는 문자열(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
참고 사이트
http://gypark.pe.kr/wiki/Perl/%EC%A0%95%
EA%B7%9C%ED%91%9C%ED%98%84%E
C%8B%9D
http://appletree.or.kr/blog/tag/regular-
expressions/
2013 Jellycoaster Inc. Dev.team
서울시 마포구 상암동 누리꿈스퀘어 연구개발타워 1111호 _ 070.7450.6572 _ dev@jellycoaster.com
감사합니다!
Jellycoaster Inc.
Dev.team

Weitere ähnliche Inhalte

Ähnlich wie Regex

정규표현식(Regular expressions)
정규표현식(Regular expressions)정규표현식(Regular expressions)
정규표현식(Regular expressions)Juhee Kim
 
외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements민태 김
 
PyCon APAC 2016 Regular Expression[A-Z]+
PyCon APAC 2016 Regular Expression[A-Z]+PyCon APAC 2016 Regular Expression[A-Z]+
PyCon APAC 2016 Regular Expression[A-Z]+Minji Yang
 
0327.web&ruby&rails
0327.web&ruby&rails0327.web&ruby&rails
0327.web&ruby&rails민정 김
 

Ähnlich wie Regex (7)

정규표현식(Regular expressions)
정규표현식(Regular expressions)정규표현식(Regular expressions)
정규표현식(Regular expressions)
 
Regex
RegexRegex
Regex
 
업무 자동화
업무 자동화업무 자동화
업무 자동화
 
외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements
 
PyCon APAC 2016 Regular Expression[A-Z]+
PyCon APAC 2016 Regular Expression[A-Z]+PyCon APAC 2016 Regular Expression[A-Z]+
PyCon APAC 2016 Regular Expression[A-Z]+
 
Javascript
JavascriptJavascript
Javascript
 
0327.web&ruby&rails
0327.web&ruby&rails0327.web&ruby&rails
0327.web&ruby&rails
 

Mehr von 정인 주

안드로이드 Tstore 부분 유료화
안드로이드 Tstore 부분 유료화안드로이드 Tstore 부분 유료화
안드로이드 Tstore 부분 유료화정인 주
 
모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-
모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-
모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-정인 주
 
Android volley library
Android volley libraryAndroid volley library
Android volley library정인 주
 
Blog 오래가는 ux 디자인
Blog 오래가는 ux 디자인Blog 오래가는 ux 디자인
Blog 오래가는 ux 디자인정인 주
 
목요일의 목어
목요일의 목어목요일의 목어
목요일의 목어정인 주
 
130522 book study-사례로보는ux디자인
130522 book study-사례로보는ux디자인130522 book study-사례로보는ux디자인
130522 book study-사례로보는ux디자인정인 주
 
130416 blog bookstudy_final
130416 blog bookstudy_final130416 blog bookstudy_final
130416 blog bookstudy_final정인 주
 
Android gcm ex_askdog
Android gcm ex_askdogAndroid gcm ex_askdog
Android gcm ex_askdog정인 주
 
Android gcm ex_askdog
Android gcm ex_askdogAndroid gcm ex_askdog
Android gcm ex_askdog정인 주
 
Android gcm ex_askdog
Android gcm ex_askdogAndroid gcm ex_askdog
Android gcm ex_askdog정인 주
 
Nfc개발문서
Nfc개발문서Nfc개발문서
Nfc개발문서정인 주
 
Book study ________ ___________
Book study  ________ ___________Book study  ________ ___________
Book study ________ ___________정인 주
 

Mehr von 정인 주 (20)

안드로이드 Tstore 부분 유료화
안드로이드 Tstore 부분 유료화안드로이드 Tstore 부분 유료화
안드로이드 Tstore 부분 유료화
 
Gcm
GcmGcm
Gcm
 
모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-
모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-
모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-
 
Android volley library
Android volley libraryAndroid volley library
Android volley library
 
Blog 오래가는 ux 디자인
Blog 오래가는 ux 디자인Blog 오래가는 ux 디자인
Blog 오래가는 ux 디자인
 
목요일의 목어
목요일의 목어목요일의 목어
목요일의 목어
 
Cdr with php
Cdr with phpCdr with php
Cdr with php
 
130522 book study-사례로보는ux디자인
130522 book study-사례로보는ux디자인130522 book study-사례로보는ux디자인
130522 book study-사례로보는ux디자인
 
130416 blog bookstudy_final
130416 blog bookstudy_final130416 blog bookstudy_final
130416 blog bookstudy_final
 
Android gcm ex_askdog
Android gcm ex_askdogAndroid gcm ex_askdog
Android gcm ex_askdog
 
Android gcm ex_askdog
Android gcm ex_askdogAndroid gcm ex_askdog
Android gcm ex_askdog
 
Android gcm ex_askdog
Android gcm ex_askdogAndroid gcm ex_askdog
Android gcm ex_askdog
 
Mvp 이전2
Mvp 이전2Mvp 이전2
Mvp 이전2
 
Nfc개발문서
Nfc개발문서Nfc개발문서
Nfc개발문서
 
Book study ________ ___________
Book study  ________ ___________Book study  ________ ___________
Book study ________ ___________
 
Nfc수정
Nfc수정Nfc수정
Nfc수정
 
Museum수정
Museum수정Museum수정
Museum수정
 
Nfc
NfcNfc
Nfc
 
Museum
MuseumMuseum
Museum
 
Starbucks
StarbucksStarbucks
Starbucks
 

Regex

  • 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
  • 4. 기본 정보 • Metacharacters 예약된 문자들 • anchor • 간단한 매칭 II 2013 Jellycoaster Inc. Dev.team
  • 5. Metacharacter 정규식 표기에 사용되도록 예약 된 문자들 {}[]()^$.|*+? 메타캐릭터를 정규식에서 일치시킬 때는 앞에 백슬래쉬를 붙인다. 2013 Jellycoaster Inc. Dev.team
  • 6. Anchor 스트링의 ‘어느 지점’에 매치시킬지를 지정 ^ : 스트링의 시작 $ : 스트링의 끝, 또는 스트링의 끝 바로 앞의 “n” ^ 와 $ 가 동시에 쓰이면 스트링의 시작과 끝에 매치되어야 하므로, 정규식이 스트링 전체에 매치된다. 2013 Jellycoaster Inc. Dev.team
  • 7. Simple Matching “Hello World” =~ /world/ “Hello World” =~ /o W/ “Hello World” =~ /o/ “2+2=4” =~ /2+2/ “2+2=4” =~ /2+2/ “housekeeper” =~ /keeper/ “housekeeper” =~ /^keeper/ “housekeeper” =~ /keeper$/ 문자 매칭 메타캐릭터 매칭 앵커 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
  • 18. Greedy quantifier 수량자들은 기본적으로 전체 정규식 매치가 성공할 수 있는 선에서, 가능한 가장 긴 문자열에 매치된다. 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
  • 26. 서울시 마포구 상암동 누리꿈스퀘어 연구개발타워 1111호 _ 070.7450.6572 _ dev@jellycoaster.com 감사합니다! Jellycoaster Inc. Dev.team