정규 표현식
intro
…
egrep 메타 문자
행의 시작과 끝
- 텍스트 행의 시작과 끝을 나타내는
^
(캐럿)과$
( 달러)- 예를 들면 ^cat 는 행이 시작하는 cat만 찾고 cat$ 는 한줄의 끝에있는 scat 과 같은 cat만 찾아낸다.
문자 클래스
- 여러 문자 가운데 한 문자 매치하기
- grey, gray 처럼 e 또는 a와 매칭되는 것을 찾을때
- gr[ae]y
- [ae] 는 a 또는 e로 해석할수 있다.
- gr[ae]y
- H[123456] 은 H1, H2의 행과 매치가 된다
- H
[123456]
은 H[1-6]
과 같다- [0123456789abcdABCD] 대신에 [0-9a-dA-B] 로 표기 가능하다
- grey, gray 처럼 e 또는 a와 매칭되는 것을 찾을때
- 예시
^cat$
의 의미- 행 시작 중 cat가 연속으로 있고 그 뒤에 행의 끝이 있는 행에 매치
- 결국 cat만 있는 행
- 행 시작 중 cat가 연속으로 있고 그 뒤에 행의 끝이 있는 행에 매치
^$
- 행 시작 바로 뒤에 행의 끝이 있는 행에 매치
- 결국 비어있는 행
- 행 시작 바로 뒤에 행의 끝이 있는 행에 매치
^
- 행 시작이 있는 행에 매치
- 모든 행에 매치됨
- 행 시작이 있는 행에 매치
부정형 문자 클래스
- […] 가 아니라 [^…]을 사용하면 주어진 문자를 제외한 모든 문자에 매치됨
- [^1-6]이라고 하면 1이상 6이하의 숫자르 ㄹ제외한 모든 문자에 매치됨
- 행의 시작과 끝에서 사용한 문자와 같다.
- 이 메타 문자도 문맥에 따라 해석하는 의미가 달라진다.
점을 이용하여 임의의 문자에 매치시키는 법
- [.] 메타문자 점은 임의의 문자에 매치되는 문자 클래스를 줄여서 쓴것임.
- 이 자리에는 아무 문자나 들어가도 된다.
- 예를 들어 03/19/76, 03-19-76, 03.19.76 같은 문자열은
- 03[-./]19[-./]76 -> 와 같이 숫자 사이에
/
,-
,.
이 들어가도 되고 - [03.19.76] -> 이렇게 간단히 도 가능하다.
- 03[-./]19[-./]76 -> 와 같이 숫자 사이에
- 03[-./]19[-./]76 에서
점
은 문자 클래스 안에 들어있기 때문에메타 문자로 간주되지 않는다
- 예를 들어 03/19/76, 03-19-76, 03.19.76 같은 문자열은
- 이 자리에는 아무 문자나 들어가도 된다.
여러 하위 표현식 중 하나를 찾는 방법
- 둘중 아무 문자열과 매칭하기 위해선
|
를 이용하면 된다- grey, gray 2개중 아무거나 찾기 위해선
- gr[ea]y 나 gray
|
grey 나 gr(a|
ey) 라고 표현 할수 있다.- 괄호를 쓰지 않고 사용하면 다른 문자열 로 인식하기 때문에 괄호를 사용해야한다.
- 아래는 얼추 같다
- Jeffrey
|
Jeffery - Jeff(rey
|
ery) - Jeff(re
|
er)y
- Jeffrey
- gr[ea]y 나 gray
- grey, gray 2개중 아무거나 찾기 위해선
대소문자 무시하는 법
- egrep 실행시 옵션
-i
를 주게되면 무시하게 된다- egrep -i `abc | cdf` smaple.txt
옵션 아이템
- color 또는 colour 를 찾는 경우를 생각해 보자.
- u가 있고 없고인데, 이 경우는 colo
u?
r 을 하면 둘다 찾을 수 있다 - ? 메타 문자는 옵션을 의미한다.
- ?는 바로 앞의 아이템에만 적용이 된다.
- July
|
Jul 은 July? 로 줄여서 쓸수있다.
- u가 있고 없고인데, 이 경우는 colo
기타 수량자 : 반복
+
- 바로 앞에 있는 아이템이 하나 이상 반복 되는것
- xxx+인 경우 xxx 최대한 여러번 반복해서 매치시키는데, 최소 하나 이상 나와야 한다
*
- 바로 앞에 있는 아이템이 0개 이상 반복 되는 것
- xxx인 경우 **을 최대한 여러번 반복해서 매치시키는데, 하나도 없어도 되고
글자 개수 지정: 간격
- 최소값과 최대값을 제공하는 메타 시퀀스가 있다.
- {3, 12} 라고 하면 최소 3번에서 최대 12번 까지 나오는 것에 매치된다.
- 아이디를 만들때 숫자와 알파벳소문자, 그리고 - 문자와 _ 문자를 사용하여 최소 5글자에서 최대 15글자까지 만들수 있다라는 조건은 아래처럼 표현 가능하다.
- ^[-a-z0-9_]{5,15}
- 아이디를 만들때 숫자와 알파벳소문자, 그리고 - 문자와 _ 문자를 사용하여 최소 5글자에서 최대 15글자까지 만들수 있다라는 조건은 아래처럼 표현 가능하다.
- 참고
이스케이프
- 메타 문자 .을 실제 문자로 인식시키기 위해서 사용되는
\
예제
큰 따옴표 안에 있는 문자열
"[^"]*"
- 양쪽 끝에 있는 큰 따옴표는 각각 문자열의 앞과 뒤에있는 큰 따옴표와 매치된다.
- 그 사이에 는 다른 큰 따옴표를 제외한 모든 문자가 들어갈수 있다.
[^"]
- 이걸로 큰 따옴표를 제외한 임의의 문자열에 매치시키고, 그 뒤에 별표를 추가하여 개수에 재한이 없을을 표시한다.
요약
활용
notepad++ 에서 사용해보자
.