복잡한 문자열을 처리할 때 사용하는 기법
특정 언어만의 고유 문법이 아니라 문자열을 처리하는 모든 곳에서 사용
원본: who is who
정규 표현식:^who --시작부분의 who부터 선택.
who is who
정규 표현식:who$ -- 끝에서 부터 선택.
who iswho
^는 시작 부터 선택
$는 끝부터 선택.
^$는 작동안함. 둘다 특수기호라서.
\는 뒤에 따라오는 특수기호를 기능을 없애고 그냥 문자로 만듬.
따라서 ^$를 하면 시작부분부터 $기호를 찾게된다. 이러한 걸 Escape라고 한다.
역할로부터 탈출 시키기.
$$를 하면 뒤에서부터 $문자를 찾음.
\를 하면 \가 탈출하면서 문장의 \를 찾게된다.
.은 모든 문자를 가져올 수 있다.
.을 입력하면 전체 문장을 선택 한다.
......처럼 6개의 점을 입력하면 문장을 6개씩의 문자로 쪼개고. 만약 남은 문자가 6개 들이가 되지 않으면 선택하지 않는다.
.을 하면 문자.을 선택.
..\d은 .사이의 문자. 를 선택한다.
[oyu]를 하면 문장에서 oyu 각각의 문자를 전부 찾는다.
[dh].을 하면 dh 문자를 찾고 그뒤의 .은 모든 문자 선택이므로 dh문자 뒤에 나오는 문자를 가져온다. how do you do 에서 ho do do를 가져옴.
[owy][yow]라고 하면 앞,뒤자리를 각각 선택. 즉 ow는 되지만 do는 앞의d가 앞의 [owy]에 없으므로 선택x
[]를 써서 문자범위를 지정할 수 있지만 전부 쓰기엔 귀찮으니 [첫문자 - 끝문자]만으로 범위를 구하게 해준다.
(Mon|Tues|Fri)day
|으로 분리된 각각이 덩어리가 되어 문장에서 mon,tues,fri덩어리를 찾음. 그후에 day가 붙게됨.
..(id|esd|nd)ay로 하면
처럼
|로 나눠진 덩어리 앞의 부분을 ..으로 선택해 가져오게 된다.
aabc abc bc에 대해(@가 빈칸.)
a*b
aab@ ab@ b@
*은 있을 수도 있고 없을 수도 있다는 뜻. 즉 기준점이 뒤에 오는 b이므로 아예 a가 없어도 b만 있다면 선택됨.
a+b
aab@ ab@ @@
+는 최소 하나는 있어야 한다. b단독은 선택 안됨.
a?b
@ab@ ab@ b@
?는 없거나 오직 하나인 경우만 선택 여러 개는 안된다.
는 전체 선택
.은 전체를 가져옴.
-A*-은 --사이에 A가 없을 수도 있고 하나일수도 있다는 것 즉 --과 -A-가 전부 선택됨.
*+는 escape로 기능제거된 *가 하나이상있는 것이 선택됨.
*, ** , ***등이 선택
-@+-는 --사이의 하나이상의 @가 선택.
-@-,-@@-,-@@@-가 선택.
[^ ]+ 부정의 ^ 뒤에 공백이 있다. 그말은 공백이 있는 것을 제외한 모든 게 선택된다는 뜻.
-X?는 X가 없거나 하나이상인 걸 선택 (-X,-)
-@?@?@?-는 각각 @가 0~1개 있으면 되므로
(--,-@-,-@@-,-@@@-가 되고 @4개이상은 안된다.)
.{5}는 전체 문장을 5개씩 끊어서 가져가고 5개보다 덜하게 남은건 선택 안함.
[els]{1,3}은 els가 들어가있는 단어의 수가 최소 1에서 최대3개까지 선택. (e,l,s나 els,lle,sss는 되지만 elss,llll같이 4자이상이면 안됨.)
[a-z]{3,}은 모든 알파벳에 들어간 문장에 대해 글자수가 3개이상이면 가능 (all,ring, darkness등)
*는 전체 선택 이는 {0,} 이것과 같다.
+는 1이상, 즉 {1,} 이것과 같다.
?는 0~1 , 즉 {0,1}
R.은 R 뒤에 오는 것들을 전부 선택
R.?는 수량자 뒤에 ?가 오게 되면 그 수량자의 최소 범위를 가지게 됨 즉 ?는 이 0~전체 이므로 최소인 0개를 선택. 즉 R만 선택하게 된다.
R.+는 R뒤에 오는게 하나이상일때 전부 선택.
R.+?는 +의 최소범위, 1개만 선택. (Ri등)
R.?는 R뒤에 0~1개 선택
R.??는 0개 선택.
\w는 단어를 가리킨다.
\w*는 단어 뒤의 것들까지 선택.
[a-z]\w*는 소문자 뒤에 오는 단어를 선택 (c3,d_4등, A1은 안됨.)
\w{5}는 5개 이상인 단어를 선택.
\w는 [A-z0-9__]과 같다.
\d는 [0-9]와 동일하다.
\A...은 글의 첫번째 문자를 택하고(A) 그 뒤의 문자 3개를 선택(...)
...\Z은 글의 마지막 문자(공백)를 택하고(Z) 그 앞의 문자 3개를 선택(...)
만약 두개이상의 문단이 있는 글에서
era ~~~
era ~~~
^era를 하면 모두 선택 되지만 \Aera를 하면 맨처음의 era만 선택이 된다.
?=X는 문자를 찾는데에는 X를 쓰지만 정작 선택 과정에서 X를 배제함.\w+(?=X)
AAAX가 있으면 AAA만 선택.
\w+(?=\w)는 문자열의 뒤의 하나를 제외하고 나머지 문자를 가져감.