그룹프로젝트를 하다보니 정규표현식을 이용해서 유효성검사를 하는 부분이 있었다. 아직도 너무 어렵지만 적용하면 유용하게 쓸 수 있기 때문에 제대로 한 번 정리해보려고 한다.
참고 사이트들
생활코딩-정규표현식
https://regexr.com/
https://regex101.com/
devmin님의 정규표현식 글
Suwoni-Codelab님의 정규표현식 글
경영학도의 좌충우돌 코딩 - 정규표현식
^
을 앞에 붙이면 앞쪽에 있는 요소를 선택, $
를 뒤에 붙이면 뒤에 있는 요소를 선택한다.
^you -> you are you
you$ -> you are you
[] 안에서 ^
를 쓸 경우는 해당문자들을 제외하고 선택 하라는 의미이다. not의 의미가 된다.
정규표현식 : [^abc1-2]
match : abcdefghijklmnopqrstuvwxyz12345
.
(마침표, 포인트).
는 모든 글자와 매칭된다. 그러나 .
가 여러개면 해당 갯수만큼 글자마자 블럭이 생성된고 나머지는 선택되지 않는다.
정규표현식 : .
match : point is point
정규표현식 : .....
match : (point)( is p)oint (빈칸까지 합해서 14글자 이므로 10글자까지만 선택된다.)
.
이나[]
같은 메타 문자를 문자열에서 찾고 싶을 때, 메타 문자를 문자 그대로 사용할 수 있도록 변환해주는 기호. .
은 모든 문자와 일치하지만, \.
의 경우 문자 .
와 일치한다.[]
(대괄호, square bracket)[]
안에 있는 문자들 중 일치하면 선택된다. 안에 들어간 것들은 or
로 연결된다. 즉, [abc]라면 'a,b,c' 중에서 한 개의 문자와 매칭된다. (대괄호안에 몇 개의 문자가 들어오든 대괄호 한 개는 하나의 글자를 의미한다.)
정규표현식 : [cbt]
match : life is choice between birth and death
정규표현식 : [cbt][et]
match : life is choice between birth and death
첫번째 정규표현식은 []
안에 들어가있는 조건을 만족하는 녀석들을 하나씩 선택하였고, 두번째는 두개의 대괄호가 있는데 순서대로 cbt 중에 하나를 만족하면서 동시에 다음 문자로 et 문자중 하나를 만족하는 녀석들이 선택되었다.
대괄호 사이에 [특정문자1-특정문자2]
가 존재할 때, 특정문자1과 특정문자2 사이의 모든 문자와 일치한다. [a-z]
는 알파뱃 소문자 a부터 z 까지와 일치한다.
정규표현식 : [a-z]
match : A Hobby Begun Late In Life. (대문자와 마침표를 제외한 녀석들이 전부 선택되었다.)
정규표현식 : [a-eA-F1-3]
match : abcdefghABCDEFGH12345
()
(소괄호, parentheses) 와 |
(파이프라인, pipeline)[]
에서는 한 글자만 매칭되었지만, ()
를 통해서 다중글자를 매칭시킬 수 있다. 즉, 그루핑 할 수 있다는 의미이며 패턴과 일치하는 문자열을 탐색하고 ()
그룹단위로 나눠서 캡쳐해놓는다. 또한, |
를 통해서 조건을 적용시킬 수 있다.
정규표현식 : (ap|le)
match : apple is apple
정규표현식 : (Mon|Tues|Fri)day
match : Monday Tuesday Friday
{}
(중괄호, curly brackets)글자의 수량을 범위로 특정할 때 사용한다. {n}
은 앞에 존재하는 문자가 n번 반복되는 문자와 일치하고, {n,m}
은 앞에 존재하는 문자가 n번 이상 m번 이하 반복되는 문자와 일치, {n,}
은 n번 이상 반복되는 문자와 일치한다.
정규표현식 : [a-z]{3}
match : Lorem ipsum dolor sit amet, consectetur adipiscing elit
한 글자가 몇 번 나타날지 구체화 시키는 역할을 한다. +
는 앞에 존재하는 문자가 1번 혹은 그 이상 반복될 때 사용하며 {1,0}
과 같은 의미이다. ?
는 앞에 존재하는 문자가 있을 수도, 없을 수도 있을 때 사용하는데 {0,1}
과 같은 의미이다. *
는 앞에 존재하는 문자가 0번 혹은 그 이상 반복되는 문자를 찾을 때 사용하는데, {0,}
과 동일하다.
정규표현식 : ab
match : ab aab aaab bc
정규표현식 : a+b
match : ab aab aaab bc
정규표현식 : a?b
match : ab aab aaab bc
정규표현식 : [ab]
match : ab aab aaab bc
+, *, {n,}
은 탐욕적 수량자이고, 뒤에 ?
문자를 덧붙이면 게으른 수량자 +?, *?, {n,}?
가 된다. 정규표현식 : <b>.*<\/b>
match : [<b>BOLD!</b><hr><b>BOLD!</b>]
<b>
와 </b>
사이에 연속된 문자들을 찾는데, 아예 전체를 일치시켜버렸다. 정규표현식 : <b>.*?<\/b>
match : [<b>BOLD!</b>]<hr>[<b>BOLD!</b>]
\d
\D
\s
\S
\w
\W
?=
?=
은 해당 패턴을 포함한 글자를 찾지만, 찾은 값스택오버플로우 참조
(베끼기)
password regex