그룹프로젝트를 하다보니 정규표현식을 이용해서 유효성검사를 하는 부분이 있었다. 아직도 너무 어렵지만 적용하면 유용하게 쓸 수 있기 때문에 제대로 한 번 정리해보려고 한다.
참고 사이트들
생활코딩-정규표현식
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