생활코딩 -- 정규 표현식

심민기·2022년 5월 9일
0

기초공부

목록 보기
22/25

정규 표현식(Regular Expressions)이란?

복잡한 문자열을 처리할 때 사용하는 기법
특정 언어만의 고유 문법이 아니라 문자열을 처리하는 모든 곳에서 사용

생활코딩.
튜토리얼 사이트

MDN

시작

^ $ \

원본: 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

[-]

[]를 써서 문자범위를 지정할 수 있지만 전부 쓰기엔 귀찮으니 [첫문자 - 끝문자]만으로 범위를 구하게 해준다.

[^]

[^]은 부정의 의미. ![](https://velog.velcdn.com/images/mingi001/post/2b91b4c6-0e2d-47b7-870a-fd84114f1bd3/image.png) ^뒤의 문자들을 제외하고 문장을 선택.

(|)

(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개이상은 안된다.)

수량자 2

.{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는 단어를 가리킨다.
\w*는 단어 뒤의 것들까지 선택.

[a-z]\w*는 소문자 뒤에 오는 단어를 선택 (c3,d_4등, A1은 안됨.)

\w{5}는 5개 이상인 단어를 선택.

\w는 [A-z0-9__]과 같다.

w,W

대문자와 소문자가 완전히 다른 의미를 가진다. W는 단어가 아닌걸 선택한다. W는 [A-z0-9__]와 같다.

d(digit 숫자.)

\d는 숫자 \D는 숫자 아닌 것들.

\d는 [0-9]와 동일하다.

b(boundary, 단어 식별.)

A Z

\A...은 글의 첫번째 문자를 택하고(A) 그 뒤의 문자 3개를 선택(...)

...\Z은 글의 마지막 문자(공백)를 택하고(Z) 그 앞의 문자 3개를 선택(...)

만약 두개이상의 문단이 있는 글에서

era ~~~

era ~~~

^era를 하면 모두 선택 되지만 \Aera를 하면 맨처음의 era만 선택이 된다.

?=X는 문자를 찾는데에는 X를 쓰지만 정작 선택 과정에서 X를 배제함.

\w+(?=X)
AAAX가 있으면 AAA만 선택.

\w+(?=\w)는 문자열의 뒤의 하나를 제외하고 나머지 문자를 가져감.

profile
왕초보

0개의 댓글