정규표현식 regex

종원유·2021년 12월 24일
0

알면 좋은 것들

목록 보기
1/2
post-thumbnail

개발 공부를 할 때 혹은 개발을 할 때 빠지지 않고 등장하는 정규표현식(regex)
Regular Expression의 약자로 개발자라면 누구나 기본적으로 알고 있고 다양한 곳에서 쓰인다.

텍스트에서 원하는 특정한 패턴을 찾을 때 유용하게 사용할 수 있다.
전화번호, 이메일 등으로 입력된 패턴을 찾을 수 있고 이를 다른 형식으로 바꿀 수도 있다.
또, 특정한 패턴으로 입력되었는지 유효성 검사를 할 때도 유용하게 사용할 수 있다.

정규표현식

정규표현식은 //안에 작성한다.
또 //gm 에서 gm처럼 //뒤에 붙는 것들을 플래그(flag)라고 부른다.

flag

g(global) : 매칭되는 다수의 결과 값을 기억한다.
m(multiline) : 문장 별로 구분하는 지 여부


regex

|

/(Hi|Hello)|(안녕)/
Hi 또는 Hello 또는 안녕
Hi와 Hello는 1그룹으로 지정되고 안녕은 2그룹으로 지정된다.
()단위로 그룹을 지정한다.

te(s|x)t
te로 시작하면서 t로 끝나는 패턴을 찾는다.
test 또는 text

[]

/[a-zA-Z0-9]y/
(a|b|...y|z)와 같다
a부터 z까지 A부터 Z까지 0부터 9까지 문자를 포함하고 y로 끝나는 패턴을 찾는다.

^

/[^a-zA-Z0-9]/
a부터 z까지 A부터 Z까지 0부터 9까지 문자를 포함하지 않는 것을 찾는다.
^은 NOT을 의미한다.

?

/tes?t/
?는 있거나 없거나를 의미한다.
test 또는 tet를 찾는다.

*

/tes*t/
*는 있거나 없거나 많거나를 의미한다.
test 또는 tet 또는 tes..st 를 찾는다.

+

/tes+t/
+는 하나 또는 많이를 의미한다.
test 또는 tes...st를 찾는다.

{}

/tes{2}t/
{2}은 s가 2번 나오는 패턴을 찾는다.

/tes{2, 3}t/
{2, 3}은 s가 2번에서 최대 3번 나오는 패턴을 찾는다.


Boundary-type

\b

/test\b/
test로 끝나는 패턴을 찾는다.

/\btest/
test로 시작하는 패턴을 찾는다.

\B

~로 시작하지 않는, ~로 끝나지 않는 패턴을 찾는다
\b와 반대

*

/^HA/
문장의 시작 위치에 있는 HA를 찾는다

/HA$/
문장의 끝 위치에 있는 HA를 찾는다

위 flag 설명에서 m옵션이 있었는데,
m 플래그 옵션을 줄 경우 라인마다 나눠서 검사를 하고,
m 플래그 옵션을 뺄 경우는 전체를 하나로 보고 패턴을 찾는다.


Characters classes

.

/./
줄바꿈 문자를 제외한 모든 문자를 선택한다.

문장에서 .를 찾고 싶으면
/./를 이용해서 찾아야한다.
특수문자의 경우는 \를 앞에 붙여야한다.

/\d/
숫자만 찾는다.

/\D/(\d와 반대)
숫자가 아닌 문자만 찾는다

/\w/
모든 문자열을 찾는다.

/\W/
문자열을 제외하고 찾는다.
ex) 띄어쓰기, 특수문자 등

/\s/
space 공백만 찾는다.

/\S/
space 공백을 제외하고 모두 찾는다.


간단 예제

전화번호

/\d{2, 3}[- .]\d{3}[- .]\d{4}/gm
전화번호 형식
1. 010-123-5678
2. 02 123 5678
3. 010.123.5678
위 정규식으로 세가지 형식의 패턴을 가진 전화번호를 찾을 수 있다.

이메일

/[a-zA-Z0-9._+-]+@[a-zA-Z0-9-]+/.[a-zA-Z0-9.]+/gm

[a-zA-Z0-9._+-]+
@앞에는 a~z, A~Z, 0~9까지 올 수 있고 특수문자로 .,_,+,-가 올 수 있다.
[]뒤의 +를 통해 있거나 많은 경우를 포함하도록 한다.

@
[a-zA-Z0-9-]+
@앞에는 a~z, A~Z, 0~9까지 올 수 있고 특수문자로 -가 올 수 있다.
위 경우 또한 [] 뒤에 +를 붙여준다.

/.
assdadas231@dsadsads 형식이 끝나고 .을 붙이는데 .의 경우는 위에서 언급했듯이 \를 작성해줌으로써
특수문자임을 알려줘야한다.

[a-zA-Z0-9.]+
ddsadasdsa@dsadasda. 이후로 나올 문자도 이처럼 작성한다.

정규표현식 퀴즈 사이트 : https://regexone.com/
정규표현식 연습 : https://regexr.com/5mhou
참고 : 드림코딩엘리(Youtube)

profile
개발자 호소인

0개의 댓글