정규표현식 regex 은 Regular Expression 의 줄임말.
1950년 Stephen Cole Kleene에 의해 개발됨
1. ^
문자열의 시작에 있는 문자
2. $
문자열의 마지막에 있는 문자
3. / (백슬래쉬)
/ 다음에 오는 표현식 (ex ^, $ 같은) 들을 문법적인 요소로서 작동하게 하지 않고 하나의 문자로 보게 만듬
escape 라고 부른다고 함
4. . (점)
어떠한 문자건, 공백이건 특수문자든 모든것을 포함
Q) ......
sol) 6개의 길이를 가진 문자 어느것이든 가능
5. [ ]
bracket 안에 있는 문자를 포함하는걸 찾음
Q) "How do you do?"에서 [oyu]
sol) o, o, you, o
Q) "How do you do?" [owy][owy]
sol) ow, yo
6. [ - ]
[C-K] 하면 [CDEFGHIJK] 랑 똑같은 것
[C-Ka-d2-6] 하면 [CDEFGHIJKabcd23456] 이랑 똑같음
7. [^] (대괄호 안의 캐럿)
제외하고 나머질 찾음.
[^CD] 라고 쓰면 C, D를 제외한 모든걸 찾는 것
8. ( | )
(ab|cd|ed) 라고 하면 ab, cd, ed를 찾음
(Mon|Tues|Wednes)day 라고 하면 Monday, Tuesday, Wednesday 를 찾음
9. *
* 앞에 있는 것이 0 또는 여러개 존재하는지?
Q) .*
sol) .............. 와 같은것이니까 모든것을 전부 포함
Q) -A*-
sol) --, --A--, --AA--, --AAA-- 등 이런것들을 포함
10. +
+ 앞에 있는 것이 1개 이상으로 존재하는지?
( * 와 차이점은 *은 0개 있어도 판별함)
11. ?
? 앞에 있는 것이 0개 이거나 1개 인지?
( * 와 + 와의 차이점은 ?는 여러개를 판별하지 않음)
tip) *, +, ? 는 수량자 라고 부름
12. { }
{n} : 중괄호 앞에 있는 녀석이 n개 만큼인걸 찾음
{n,} : 중괄호 앞에 있는 녀석이 n개 이상인걸 찾음
{n,m} : 중괄호 앞에 있는 녀석이 n 이상 m 이하인걸 찾음
ex) AB*A 는 AB{0,}A 와 같다
ex) AB+A 는 AB{1,}A 와 같다
ex) AB?A 는 AB{0,1}A 와 같다
13. 수량자(*, +, ?) 뒤에 붙은 ?
*? 하면 0개를 뜻함. 왜냐면 *은 0~여러개 를 뜻하는데, 그 중 가장 작은 0을 뜻하게 만드는 것
+? 하면 1개를 뜻함. 이유는 위와 같이 +는 1~여러개 를 뜻하는데, 그 중 가장 작은 1을 뜻함
?? 하면 0개를 뜻함. 이유는 위와 같다
(*, +, ?)는 탐욕적인(greedy) 수량자라서 가장 넓은 범위의 문자열을 가져옴.
ex) "<div>test</div><div>test2</div>" 라는 텍스트에서
<div>.+</div> 를 하면 "<div>test></div><div>test2</div>" 를 들고오지만
<div>.+?</div> 를 하면 "<div>test</div>" 를 가져온다.
이러한 ?를 게으른(lazy) 수량자 라고 함.
14. /w
word. 알파뱃, 숫자, "_" 를 포함하는 단어
[A-z0-9_] 랑 똑같음.
15. /W
/w의 정반대. word가 아닌 것. 공백, 특수문자, 숫자를 포함하는 단어
16. /d
digit. 0~9를 포함하는 단어
17. /D
digit이 아닌 것. /d의 반대.
18. /b
boundary. 앞에 붙이면 앞에있는걸, 뒤에 붙이면 뒤에있는걸 체크
19. /B
/b의 반대
20. /A
가장 앞의 것을 체크
^와 다른점은, ^은 멀티라인일 때 앞에 붙은애를 모두 포함한다면 /A는 1개만 포함한다.
21. /Z
가장 뒤에 것을 체크
$와 다른점은, $은 멀티라인일 때 뒤에 붙은애를 모두 포함한다면 /Z는 1개만 포함한다.
22. (?="문자")
"문자" 를 포함하여 검색을 하지만, 결과로 포함을 시키지는 않는다.
"문자" 가 아니어도 /w /d /W /D 이런녀석들이 들어가도 됨.
'TIL' 카테고리의 다른 글
객체지향 개발 5대 원리, SOLID (0) | 2022.10.21 |
---|---|
동기 vs 비동기, Blocking vs Non-Blocking (0) | 2022.10.19 |
csv insert with MySQL (Load data infile) 방법 (0) | 2022.08.30 |
왜 Hello World ? (0) | 2021.12.25 |
Docker 를 왜 쓸까 (0) | 2021.12.25 |