짬뽕얼큰하게의 맨땅에 헤딩 :: 'Regular Expressions' 태그의 글 목록

'Regular Expressions'에 해당되는 글 1건

정규표현식이란 원하는 문자열을 찾기 위해 독특한 패턴으로 인코딩한 텍스트 문자열


정규표현식은 ed, sed,vi, grep, AWK 등을 비롯한 여러가지 유닉스도구에서 중요한 역할을 함.



1. RegexPal로 시작하기

사이트 주소: http://www.regexpal.com 


2. 단축문자 사용하기

2-1) \d : [0-9] 를 의미

2-2) \D: 숫자가 아닌 문자

전화번호 표현: \d\d\d-\d\d\d\d-\d\d\d\d   or   \d\d\d\D\d\d\d\d\D\d\d\d\d


3. 임의의 문자 찾기 (.)

점(.)을 이용하여 파이픈 찾기


4. 그룹참조와 역참조

그룹 참조: ( ) 를 사용하여 표현

역참조: \1 은 첫번째 그룹을 의미

(\d)\d\1 == (\d)\d\d


5. 수량자 사용하기

\d{3} : 숫자 3개의미, 중괄호 안의 숫자는 패턴의 수

? : 하나 이하

+: 하나 이상

*: 0 이상


000-000-0000 번호 파싱하기!

(\d{3,4}[.-]?)+ : 숫자(\d)가 최소3개에서 최대 4개까지({3,4}) 올수있고, 이어서 하이픈이나 다른 문자([.-])가 한개 있거나 없을수 있으며(?) 이러한 패턴이 하나 이상 반복(+)



(\d{3}[.-]?){2}\d{4} : 숫자(\d)가 3개{3}온후 하이픈이나 문자([.-]) 존재할 수 있고(?) 이 패턴이 두번({2}) 존재한 이후에 숫자(\d) 4개({4})



지역번호인 첫 번째 숫자 세 개를 둘러싸는 괄호가 있어도 되고 없어도 되며, 지역번호 자체도 있어도 되고 없어도 되는 정규표현식

^(\(\d{3}\)|\d{3}[.-]?)?\d{3}[.-]\d{4}$




6. 숫자가 아닌 문자 찾기

\D : 숫자가 아닌 문자

[^0-9]: 0~9를 숫자를 제외한 문자

[^\d]: 숫자가 아닌 문자


7. \w로 문자 찾기

\D와 \w의 차이점은 \D는 공백, 구두점, 인용부호, 하이픈, 슬래시, 대괄호 문자들도 찾는반면, \w는 그렇지 않음.


\w: [a-zA-Z0-9_] 을 의미

\W: [^a-zA-Z0-9_]을 의미




8. 공백 찾기

\s : [ \t\n\r] 을 의미, 맨처음 띄어쓰기도 있음

\S : [^ \t\n\r] 을 의미, 공백을 제외한 문자를 찾음



9. 단어의 경계 \b

\b는 그이후에오는 문자, 숫자의 경계를 의미.

설명이 힘드므로 사진으로..


9-1) 


9-2) 


9-3)



\b는 특정 문자를 나타내는게 아니라... 경계를 의미하는것을 기억하자.

또한 이 경계의 기준은 다음에 나오는 표현식에따라 바뀔수 있음. 

점(.) 을 넣은경우에는 경계가 아래처럼 바뀜


9-4) 





10. 임의의 문자 0개 이상 찾기 

10-1) .*

10-2) [^\n]* or [^\n\r]* 

10-3) 한개이상은 .+


수량자는 욕심쟁이 수량자. 가능한 가장 많은것을 찾기때문에, .*이나 .+시 한줄 전체를 인식.



11. sed 를 사용하여 마크업 추가하기

sed: 유닉스 스티리밍 편집기로, 정규표현식을 사용하여 텍스트를 변경하는 도구


echo Hello | sed s/Hello/Goodbye


표준출력 Hello가 sed 입력으로 들어가고, 입력으로 들어온 Hello를 Goodbyte바꿈.


sed -n 's/^/<h1>/;s/$/<\/h1>/p;q' rime.txt

11-1) -n은 입력된 각 행을 표준출력으로 보내는 sed 기본 기능을 막음. 정규표현식이 적용된 행만 출력하기 위함

11-2) s/^/<h1> 은 행의 시작(^)위치에 <h1> 태그를 넣는다.

11-3) 세미콜론(;)으로 여러 개의 sed 명령어를 구분.

11-4) s/$<\/h1>/는 행의 끝($)에 </h1> 종료 태그를 삽입. p명령어는 해당 행(1행)을 출력. p 명령어는 모든 행을 무조건 출력하는 -n옵션과 반대 기능을 함.

11-5) q명령어는 프로그램 종료. 따라서 sed는 오직 첫행만 처리

11-6) 이 모든 작업은 rime.txt. 파일에 대해서 수행됨


sed는 세미콜론(;) 대신에 -e옵션으로 여러가지 명령어를 붙일 수 있음.

파일에 명령어를 넣고 실행도 가능: -f옵션


12. perl을 사용하여 마크업 추가하기

perl은 범용 프로그래밍 언어로, 정규표현식 처리와 텍스트 프로세싱 기능이 매우 타월


perl -ne 'if ($. == 1) { s/^/<h1>/; s/$/<\/h1>/m; print; }' rime.txt

12-1) perl 명령어는 perl 을 실행

12-2) -n옵션은 입력파일(rime.txt)의 내용을 한 행씩 처리

12-3) -e 옵션은 파일이 아니라 명령행에 프로그램 코드를 직접 입력한다는 뜻(sed 처럼)

12-4) if문으로 현재 행이 1행인지 확인. $.은 Perl의 특수 변수로, 현재행을 가리킴

12-5) 첫 번째 대체 명령어 s는 첫 행(^)의 시작부분을 찾아서 <h1>시작 태그를 넣음

12-6) 두 번째 대체 명령어 s는 행의 끝($)을 찾아서 </h1> 종료 태그를 넣음

12-7) 대체 명령어 끝에 있는 변경자(플래그) m(multiline)은 이 행을 따로 구분해서 처리하라는 의미, $는 파일의 끝이 아니라 1행의 끝을 찾음.

12-8) 마지막 결과를 표준 출력으로 출력



h1.pl에 명령어를 넣고... perl h1.pl rime.txt를 해도 됨.








참고 서적: 처음 시작하는 정규표현식 (한빛미디어)

블로그 이미지

짬뽕얼큰하게

,