SlideShare uma empresa Scribd logo
1 de 19
Preface 
 Regular Expression (정규표현식)의 약칭 REGEX 
 string pattern은 문자열의 조합되는 규칙 
 meta charater는 다른 의미를 수식하는 문자 
 grep은 정규식을 평가할 수 있는 유틸리티입니다. 
 egrep, fgrep은 grep의 특화된 버전입니다. 
 sed는 스트림 에디터입니다. 
 awk는 패턴식을 다룰 수 있는 언어툴입니다.
what is String Pattern? 
 조합된 문자열의 규칙 
 e-mail 주소 
 중간에 @ 문자가 등장 
 @ 문자의 오른쪽은 dot 와 영문, 아스키코드로 이루어짐 
 @ 문자의 왼쪽은 계정명 
 Web URL 
 http:// 으로 시작 
 호스트이름뒤에는 URI 가 붙고 디렉토리구조로 명명 
 CGI 기법이 사용될 경우에 ? 이 등장할수도 있음
Regular Expression : Examples 
a.cdef? 
[a-zA-Z]+ 
.*boy 
(caret|dalar) 
(.*/)[^/]* 
^Do.*?$ 
http://([a-zA-Z0-9.-])/.* 
http://.*?(.*) 
REGEX를 배운 뒤에 해석해봅시다!
POSIX regex: meta char. 
문자 지정 . 임의의 문자 한 개를 의미합니다. 
반복 지정 
? 선행문자패턴이 0개 혹은 1개 나타납니다. - ERE 
+ 선행문자패턴이 1개 이상 반복됩니다. - ERE 
* 선행문자패턴이 0개 이상 반복됩니다. 
{...} 
(interval) 반복수를 직접 지정할 수 있습니다. 예를 들어 
{3} : 3번 반복 {,7} : 7번 이하 {2,5} : 2~5번 반복 
위치지정 
^ 라인의 앞부분을 의미합니다. 
$ 라인의 끝부분을 의미합니다. 
그룹 지정 
[...] 안에 지정된 문자들 그룹 중에 한 문자를 지정합니다. 
[^...] 안에 지정된 그룹의 문자를 제외한 나머지(여집합)를 지정합니다. 
기타 
 (escape) 메타의 의미를 없애줍니다. 
| (alternation) OR연산을 합니다. - ERE 
( ) 괄호는 패턴을 그룹화 및 백레퍼런스의 작동을 합니다. 
* POSIX RE - IEEE std 1003.1 (International standard) 
* ERE - Extended Regular Expression
applying pattern 
 dot/period : . - any single character 
 c.b : cab, cbb, ccb, cdb, c1b, c2b 등등 
 a..b : axyb, a12b, ax0b, a#-b 등등 
 a.........b : 이런 방식으로는 쓰지 않는다.
applying pattern (con't) 
 ?, +, *, {m,n} - iteration, interval 
 X?ML : XML or ML 
 can+ : can, cann, cannn, cannnn, ... 
 can* : ca, can, cann, cannn, ... 
 http.* : http://, httpd, https, http1234 
 "http"뒤에 어떤 문자도 붙을 수 있다 
 abc{2,5} : abcc, abccc, abcccc, abccccc 
 interval expression은 몇몇 유틸, RE matching engine에서는 지원 않는다.
applying pattern (con't) 
 ^, $ - position 
 ^ftp : "ftp"로 시작하는 행 
 ^$ : 비어있는 행 (행의 시작과 끝에 아무런 문자도 없다) 
 <BR>$ : <BR>로 끝나는 경우
applying pattern (con't) 
 [ ], [^ ] - character class 
 [abcd] : a, b, c, d 
 [0-9] : 0, 1, 2, ... , 9 
 [a-zA-Z0-9] : 알파벳과 숫자 
 [^0-9] : [0-9]을 제외한 나머지 
 ^자체를 그룹화 하려면? 
 ^이 [ 바로 뒤에만 오지 않으면 된다. 
 혹은 escape 시키거나... 
 interval expression은 몇몇 툴은 옵션을 넣어야만 지원한다. 
 e.g. awk
greedy matching 
 greedy matching 이란? 
$ var2="It’s gonna be <b>real</b>It’s gonna <i>change everything 
</i> I feel" 
$ echo $var2 | egrep -o "<.+>" 
<b>real</b>It's gonna <i>change everything</i> 
 pattern 은 최대한 많은 수의 매칭을 하려고 함 
 greedy matching후 result set의 범위를 줄여나가면서 정확한 표현식 
을 완성하도록... 
 non-greedy matching 이란? 
 greedy matching 결과를 최소 매칭을 위해 수정한 결과.
non-greedy matching (con't) 
 non-greedy matching을 위한 표현식의 수정 
$ var2="It’s gonna be <b>real</b>It’s gonna <i>change everything 
</i> I feel" 
$ echo $var2 | egrep -o "<.+>" 
<b>real</b>It's gonna <i>change everything</i> 
$ echo $var2 | egrep -o "<[^<>]+>" 
<b> 
</b> 
<i> 
</i>
back-reference 
 매칭된 결과를 다시 사용하는 패턴 (백레퍼런스) 
 "( )"로 묶인 패턴 매칭 부분을 "#"의 형태로 재사용 
(#는 숫자가 순서대로), 0번은 전체 매칭 결과 
$ egrep "^(.+):x:[0-9]+:[0-9]+:.*:/home/1:" /etc/passwd 
sunyzero:x:500:500:Steven Kim:/home/sunyzero:/bin/bash 
linuxer:x:502:502::/home/linuxer:/bin/bash 
$ egrep -v "^(.+):x:[0-9]+:[0-9]+:.*:/home/1:" /etc/passwd 
... (생략, 상상하시기 바랍니다) ... 
 -v : invert 
 --color : Surround the matched (non-empty) strings
back-reference (con’t) 
 back-reference 응용 : tag로 감싸여진 부분 추출 
$ var2="It’s gonna be <b>real</b>It’s gonna <i>change everything 
</i> I feel" 
$ echo $var2 | egrep -o "<([a-zA-Z0-9]+)>.*</1>" 
<b>real</b> 
<i>change everything</i> 
$ echo $var2 | egrep --color "<([a-zA-Z0-9]+)>.*</1>" 
... 생략 ...
Tip! - sed (stream ed) 
 substitution (sed) 
 vim의 substitution command와 같다 
$ var2="It’s gonna be <b>real</b>It’s gonna <i>change everything 
</i> I feel" 
$ echo $var2 | sed -e "s/<[^<>]+>/ /g" 
It's gonna be real It's gonna change everything I feel 
$ echo $var2 | sed -e "s,<[^<>]+>, ,g" 
 vim의 substitution command는 sed의 기능이 포함된 것뿐이다! 
= sed를 알면 vim도 알고... UNIX는 이렇게 서로 연관된 기능들이 많다.
Tip! - awk 
 awk에서도 위의 모든 기능을 구현할 수 있다. 
$ var2="It’s gonna be <b>real</b>It’s gonna <i>change everything 
</i> I feel" 
$ echo $var2 | awk '{ gsub(/[ ]*<[^<>]+>[ ]*/, " "); print }' 
It’s gonna be real It’s gonna change everything I feel
alternation 
 ( )는 alternation 용도로도 사용됨 
 "( )" alternation 이나 pattern group을 묶을때도 사용된다. 
$ echo "cat is not dog" | egrep -o "(cat|dog)" 
cat 
dog 
$ echo "My Childhood~~~ bye bye" | egrep -o "(child|boy)?hood" 
hood
predefined character class 
클래스 설 명 
[[:alnum:]] 알파벳과 숫자들의 모음 
[[:alpha:]] 알파벳들 (대소문자) 
[[:blank:]] Tab(t)을 의미 
[[:cntrl:]] 제어문자들을 의미 
[[:digit:]] 숫자들을 의미 
[[:xdigit:]] 16진수(hex)형 숫자들을 의미, 즉 0-9a-fA-F 를 포함한다. 
[[:upper:]] 알파벳 대문자 
[[:lower:]] 알파벳 소문자 
[[:space:]] tab(t), CR(r), New line(n) 을 포함한다. 
[[:print:]] 출력 가능한 문자들 
[[:graph:]] 공백을 제외한 문자들 
[[:punct:]] 출력 가능한 특수문자들
predefined character class (con't) 
 [...]안에 조합가능 
$ var5="sunyzero@email.com:010-8500-80**:Sun-young Kim:AB-0105R" 
$ echo $var5 | egrep -o "^[[:alpha:]@]+" 
sunyzero@email 
$ echo $var5 | egrep -o "[[:upper:][:digit:]-]{8}" 
010-8500 
AB-0105R 
 sunyzero@email까지만 잘렸다. 모두 나오게 하려면?
boundary - ERE 
 word 경계 검색에 사용 
b boundary가 맞는 표현식만 찾습니다. (단어 경계면 검색) 
B boundary에 맞지 않는 표현식만 찾습니다. (단어 경계면이 아닌 경우만 검색) 
$ var3="abc? <def> 123hijklm" 
$ echo $var3 | egrep -o "[a-j]+" 
$ echo $var3 | egrep --color "B[a-j]+B" 
abc? <def> 123hijklm 
abc 
def 
hij 
$ echo $var3 | egrep --color "b[a-j]+b" 
abc? <def> 123hijklm
REGEX and PCRE 
 POSIX REGEX 
 간단한 패턴 매칭에 사용된다. 
 패턴의 복잡함이 늘어나면 성능저하가 발생. 
 처음엔 꼭 POSIX REGEX부터 학습해야만 한다.- Standard니까! 
 PCRE (Perl Compatible Regular Expr.) 
 perl에서 파생된 확장된 정규표현식 
 매우 빠른 속도, 확장된 표현식에... 
 C, C++, 기타 대부분의 언어가 지원한다. (추가 라이브러리로 제공) 
 실무라면 PCRE를 사용하는 편이 낫다.

Mais conteúdo relacionado

Mais procurados

스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오Taeoh Kim
 
포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1Hoyoung Jung
 
포인터의 기초(1)
포인터의 기초(1)포인터의 기초(1)
포인터의 기초(1)Hoyoung Jung
 
4. 함수포인터
4. 함수포인터4. 함수포인터
4. 함수포인터Hoyoung Jung
 
The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체해강
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Jaejin Yun
 
포인터와 배열
포인터와 배열포인터와 배열
포인터와 배열Kim YoSep
 
Lua 문법 -함수
Lua 문법 -함수Lua 문법 -함수
Lua 문법 -함수Jaehoon Lee
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용유석 남
 
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법홍준 김
 
2012 Ds D2 03 Pdf
2012 Ds D2 03 Pdf2012 Ds D2 03 Pdf
2012 Ds D2 03 Pdfkd19h
 
변수 이름의 효과
변수 이름의 효과변수 이름의 효과
변수 이름의 효과민욱 이
 
Haskell study 10
Haskell study 10Haskell study 10
Haskell study 10Nam Hyeonuk
 
구문과 의미론(정적 의미론까지)
구문과 의미론(정적 의미론까지)구문과 의미론(정적 의미론까지)
구문과 의미론(정적 의미론까지)Nam Hyeonuk
 

Mais procurados (20)

Lua 문법
Lua 문법Lua 문법
Lua 문법
 
3.포인터
3.포인터3.포인터
3.포인터
 
Lua script
Lua scriptLua script
Lua script
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1
 
포인터의 기초(1)
포인터의 기초(1)포인터의 기초(1)
포인터의 기초(1)
 
4. 함수포인터
4. 함수포인터4. 함수포인터
4. 함수포인터
 
The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버
 
Erlang
ErlangErlang
Erlang
 
포인터와 배열
포인터와 배열포인터와 배열
포인터와 배열
 
Lua 문법 -함수
Lua 문법 -함수Lua 문법 -함수
Lua 문법 -함수
 
9. pointer
9. pointer9. pointer
9. pointer
 
2012 Ds 03
2012 Ds 032012 Ds 03
2012 Ds 03
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용
 
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
 
2012 Ds D2 03 Pdf
2012 Ds D2 03 Pdf2012 Ds D2 03 Pdf
2012 Ds D2 03 Pdf
 
변수 이름의 효과
변수 이름의 효과변수 이름의 효과
변수 이름의 효과
 
Haskell study 10
Haskell study 10Haskell study 10
Haskell study 10
 
구문과 의미론(정적 의미론까지)
구문과 의미론(정적 의미론까지)구문과 의미론(정적 의미론까지)
구문과 의미론(정적 의미론까지)
 

Semelhante a Regex

0327.web&ruby&rails
0327.web&ruby&rails0327.web&ruby&rails
0327.web&ruby&rails민정 김
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로Oracle Korea
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법SeongHyun Ahn
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차Han Sung Kim
 
5 2. string processing
5 2. string processing5 2. string processing
5 2. string processing웅식 전
 
Functional programming
Functional programmingFunctional programming
Functional programmingssuserdcfefa
 
R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작Terry Cho
 
liftIO 2022 quasiquote
liftIO 2022 quasiquoteliftIO 2022 quasiquote
liftIO 2022 quasiquoteHyunseok Cho
 
Programming skills 1부
Programming skills 1부Programming skills 1부
Programming skills 1부JiHyung Lee
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)JiandSon
 
Lightning talk - 2
Lightning talk - 2Lightning talk - 2
Lightning talk - 2DonggyuKim21
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선daewon jeong
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법Terry Cho
 
C Language I
C Language IC Language I
C Language ISuho Kwon
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 명신 김
 

Semelhante a Regex (20)

0327.web&ruby&rails
0327.web&ruby&rails0327.web&ruby&rails
0327.web&ruby&rails
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
 
Java.next
Java.nextJava.next
Java.next
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차
 
Haskell study 4
Haskell study 4Haskell study 4
Haskell study 4
 
5 2. string processing
5 2. string processing5 2. string processing
5 2. string processing
 
업무 자동화
업무 자동화업무 자동화
업무 자동화
 
Functional programming
Functional programmingFunctional programming
Functional programming
 
R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작
 
Haskell study 5
Haskell study 5Haskell study 5
Haskell study 5
 
liftIO 2022 quasiquote
liftIO 2022 quasiquoteliftIO 2022 quasiquote
liftIO 2022 quasiquote
 
Programming skills 1부
Programming skills 1부Programming skills 1부
Programming skills 1부
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
 
Scala
ScalaScala
Scala
 
Lightning talk - 2
Lightning talk - 2Lightning talk - 2
Lightning talk - 2
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
C Language I
C Language IC Language I
C Language I
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 

Mais de Kangwook Lee

Mais de Kangwook Lee (20)

빅데이터전문가교육 3학기 1
빅데이터전문가교육 3학기 1빅데이터전문가교육 3학기 1
빅데이터전문가교육 3학기 1
 
빅데이터
빅데이터빅데이터
빅데이터
 
분석8기 4조
분석8기 4조분석8기 4조
분석8기 4조
 
분석7기 5조
분석7기 5조분석7기 5조
분석7기 5조
 
분석6기 4조
분석6기 4조분석6기 4조
분석6기 4조
 
분석5기 4조
분석5기 4조분석5기 4조
분석5기 4조
 
기술8기 2조
기술8기 2조기술8기 2조
기술8기 2조
 
기술7기 2조
기술7기 2조기술7기 2조
기술7기 2조
 
기술6기 3조
기술6기 3조기술6기 3조
기술6기 3조
 
기술5기 1조
기술5기 1조기술5기 1조
기술5기 1조
 
Apply교육
Apply교육Apply교육
Apply교육
 
빅데이터 분석활용 가이드 (1)
빅데이터 분석활용 가이드 (1)빅데이터 분석활용 가이드 (1)
빅데이터 분석활용 가이드 (1)
 
Editing textvariables
Editing textvariablesEditing textvariables
Editing textvariables
 
Summarizing data
Summarizing dataSummarizing data
Summarizing data
 
Subsetting andsorting
Subsetting andsortingSubsetting andsorting
Subsetting andsorting
 
Readingfromothersources
ReadingfromothersourcesReadingfromothersources
Readingfromothersources
 
Readingfromapis
ReadingfromapisReadingfromapis
Readingfromapis
 
Reading files4
Reading files4Reading files4
Reading files4
 
Reading files3
Reading files3Reading files3
Reading files3
 
Reading files2
Reading files2Reading files2
Reading files2
 

Regex

  • 1. Preface  Regular Expression (정규표현식)의 약칭 REGEX  string pattern은 문자열의 조합되는 규칙  meta charater는 다른 의미를 수식하는 문자  grep은 정규식을 평가할 수 있는 유틸리티입니다.  egrep, fgrep은 grep의 특화된 버전입니다.  sed는 스트림 에디터입니다.  awk는 패턴식을 다룰 수 있는 언어툴입니다.
  • 2. what is String Pattern?  조합된 문자열의 규칙  e-mail 주소  중간에 @ 문자가 등장  @ 문자의 오른쪽은 dot 와 영문, 아스키코드로 이루어짐  @ 문자의 왼쪽은 계정명  Web URL  http:// 으로 시작  호스트이름뒤에는 URI 가 붙고 디렉토리구조로 명명  CGI 기법이 사용될 경우에 ? 이 등장할수도 있음
  • 3. Regular Expression : Examples a.cdef? [a-zA-Z]+ .*boy (caret|dalar) (.*/)[^/]* ^Do.*?$ http://([a-zA-Z0-9.-])/.* http://.*?(.*) REGEX를 배운 뒤에 해석해봅시다!
  • 4. POSIX regex: meta char. 문자 지정 . 임의의 문자 한 개를 의미합니다. 반복 지정 ? 선행문자패턴이 0개 혹은 1개 나타납니다. - ERE + 선행문자패턴이 1개 이상 반복됩니다. - ERE * 선행문자패턴이 0개 이상 반복됩니다. {...} (interval) 반복수를 직접 지정할 수 있습니다. 예를 들어 {3} : 3번 반복 {,7} : 7번 이하 {2,5} : 2~5번 반복 위치지정 ^ 라인의 앞부분을 의미합니다. $ 라인의 끝부분을 의미합니다. 그룹 지정 [...] 안에 지정된 문자들 그룹 중에 한 문자를 지정합니다. [^...] 안에 지정된 그룹의 문자를 제외한 나머지(여집합)를 지정합니다. 기타 (escape) 메타의 의미를 없애줍니다. | (alternation) OR연산을 합니다. - ERE ( ) 괄호는 패턴을 그룹화 및 백레퍼런스의 작동을 합니다. * POSIX RE - IEEE std 1003.1 (International standard) * ERE - Extended Regular Expression
  • 5. applying pattern  dot/period : . - any single character  c.b : cab, cbb, ccb, cdb, c1b, c2b 등등  a..b : axyb, a12b, ax0b, a#-b 등등  a.........b : 이런 방식으로는 쓰지 않는다.
  • 6. applying pattern (con't)  ?, +, *, {m,n} - iteration, interval  X?ML : XML or ML  can+ : can, cann, cannn, cannnn, ...  can* : ca, can, cann, cannn, ...  http.* : http://, httpd, https, http1234  "http"뒤에 어떤 문자도 붙을 수 있다  abc{2,5} : abcc, abccc, abcccc, abccccc  interval expression은 몇몇 유틸, RE matching engine에서는 지원 않는다.
  • 7. applying pattern (con't)  ^, $ - position  ^ftp : "ftp"로 시작하는 행  ^$ : 비어있는 행 (행의 시작과 끝에 아무런 문자도 없다)  <BR>$ : <BR>로 끝나는 경우
  • 8. applying pattern (con't)  [ ], [^ ] - character class  [abcd] : a, b, c, d  [0-9] : 0, 1, 2, ... , 9  [a-zA-Z0-9] : 알파벳과 숫자  [^0-9] : [0-9]을 제외한 나머지  ^자체를 그룹화 하려면?  ^이 [ 바로 뒤에만 오지 않으면 된다.  혹은 escape 시키거나...  interval expression은 몇몇 툴은 옵션을 넣어야만 지원한다.  e.g. awk
  • 9. greedy matching  greedy matching 이란? $ var2="It’s gonna be <b>real</b>It’s gonna <i>change everything </i> I feel" $ echo $var2 | egrep -o "<.+>" <b>real</b>It's gonna <i>change everything</i>  pattern 은 최대한 많은 수의 매칭을 하려고 함  greedy matching후 result set의 범위를 줄여나가면서 정확한 표현식 을 완성하도록...  non-greedy matching 이란?  greedy matching 결과를 최소 매칭을 위해 수정한 결과.
  • 10. non-greedy matching (con't)  non-greedy matching을 위한 표현식의 수정 $ var2="It’s gonna be <b>real</b>It’s gonna <i>change everything </i> I feel" $ echo $var2 | egrep -o "<.+>" <b>real</b>It's gonna <i>change everything</i> $ echo $var2 | egrep -o "<[^<>]+>" <b> </b> <i> </i>
  • 11. back-reference  매칭된 결과를 다시 사용하는 패턴 (백레퍼런스)  "( )"로 묶인 패턴 매칭 부분을 "#"의 형태로 재사용 (#는 숫자가 순서대로), 0번은 전체 매칭 결과 $ egrep "^(.+):x:[0-9]+:[0-9]+:.*:/home/1:" /etc/passwd sunyzero:x:500:500:Steven Kim:/home/sunyzero:/bin/bash linuxer:x:502:502::/home/linuxer:/bin/bash $ egrep -v "^(.+):x:[0-9]+:[0-9]+:.*:/home/1:" /etc/passwd ... (생략, 상상하시기 바랍니다) ...  -v : invert  --color : Surround the matched (non-empty) strings
  • 12. back-reference (con’t)  back-reference 응용 : tag로 감싸여진 부분 추출 $ var2="It’s gonna be <b>real</b>It’s gonna <i>change everything </i> I feel" $ echo $var2 | egrep -o "<([a-zA-Z0-9]+)>.*</1>" <b>real</b> <i>change everything</i> $ echo $var2 | egrep --color "<([a-zA-Z0-9]+)>.*</1>" ... 생략 ...
  • 13. Tip! - sed (stream ed)  substitution (sed)  vim의 substitution command와 같다 $ var2="It’s gonna be <b>real</b>It’s gonna <i>change everything </i> I feel" $ echo $var2 | sed -e "s/<[^<>]+>/ /g" It's gonna be real It's gonna change everything I feel $ echo $var2 | sed -e "s,<[^<>]+>, ,g"  vim의 substitution command는 sed의 기능이 포함된 것뿐이다! = sed를 알면 vim도 알고... UNIX는 이렇게 서로 연관된 기능들이 많다.
  • 14. Tip! - awk  awk에서도 위의 모든 기능을 구현할 수 있다. $ var2="It’s gonna be <b>real</b>It’s gonna <i>change everything </i> I feel" $ echo $var2 | awk '{ gsub(/[ ]*<[^<>]+>[ ]*/, " "); print }' It’s gonna be real It’s gonna change everything I feel
  • 15. alternation  ( )는 alternation 용도로도 사용됨  "( )" alternation 이나 pattern group을 묶을때도 사용된다. $ echo "cat is not dog" | egrep -o "(cat|dog)" cat dog $ echo "My Childhood~~~ bye bye" | egrep -o "(child|boy)?hood" hood
  • 16. predefined character class 클래스 설 명 [[:alnum:]] 알파벳과 숫자들의 모음 [[:alpha:]] 알파벳들 (대소문자) [[:blank:]] Tab(t)을 의미 [[:cntrl:]] 제어문자들을 의미 [[:digit:]] 숫자들을 의미 [[:xdigit:]] 16진수(hex)형 숫자들을 의미, 즉 0-9a-fA-F 를 포함한다. [[:upper:]] 알파벳 대문자 [[:lower:]] 알파벳 소문자 [[:space:]] tab(t), CR(r), New line(n) 을 포함한다. [[:print:]] 출력 가능한 문자들 [[:graph:]] 공백을 제외한 문자들 [[:punct:]] 출력 가능한 특수문자들
  • 17. predefined character class (con't)  [...]안에 조합가능 $ var5="sunyzero@email.com:010-8500-80**:Sun-young Kim:AB-0105R" $ echo $var5 | egrep -o "^[[:alpha:]@]+" sunyzero@email $ echo $var5 | egrep -o "[[:upper:][:digit:]-]{8}" 010-8500 AB-0105R  sunyzero@email까지만 잘렸다. 모두 나오게 하려면?
  • 18. boundary - ERE  word 경계 검색에 사용 b boundary가 맞는 표현식만 찾습니다. (단어 경계면 검색) B boundary에 맞지 않는 표현식만 찾습니다. (단어 경계면이 아닌 경우만 검색) $ var3="abc? <def> 123hijklm" $ echo $var3 | egrep -o "[a-j]+" $ echo $var3 | egrep --color "B[a-j]+B" abc? <def> 123hijklm abc def hij $ echo $var3 | egrep --color "b[a-j]+b" abc? <def> 123hijklm
  • 19. REGEX and PCRE  POSIX REGEX  간단한 패턴 매칭에 사용된다.  패턴의 복잡함이 늘어나면 성능저하가 발생.  처음엔 꼭 POSIX REGEX부터 학습해야만 한다.- Standard니까!  PCRE (Perl Compatible Regular Expr.)  perl에서 파생된 확장된 정규표현식  매우 빠른 속도, 확장된 표현식에...  C, C++, 기타 대부분의 언어가 지원한다. (추가 라이브러리로 제공)  실무라면 PCRE를 사용하는 편이 낫다.