정규표현식
프로그래밍에서 문자열을 다룰 때, 문자열의 일정한 패턴을 표현하는 일종의 형식 언어
보통 RegEx
혹은 RegExp
라 많이 쓴다.
정규표현식 sample text가 있어 먼저 소개하겠습니다.
https://regexr.com/5nvc2
정규표현식을 입력하는 공간이 위에 나와있으며 뒤에 gm
이라 붙어있는 것은 flag
이다. flag
에 대한 설정은 오른쪽 상단에서 할 수 있습니다. g
는 global
로 모든 문자열에서, m
은 multiline
으로 여러 라인에서 패턴을 찾겠다는 옵션입니다.
정규표현식 입력란에 //gm
이라고 넣어보자. 이는 현재 오류가 발생한다. //
안에 어떤 값을 넣어주어야 하는데 넣어주지 않았기 때문이다.
//
뒤에 있는 것은 flag
이며 플래그 버튼을 누르면 사용할 수 있는 플래그의 종류 및 설명이 나온다.
아래와 같이 입력해보자. 정규표현식에서는 대소문자 구분을 하지만 gim
flag를 주면 대소문자 구분을 하지 않는다.
/hello/gm
/hello world/gm
/Hello/gm
문자열의 처음에 나오는 hello, 끝에 나오는 hello를 찾습니다.
/^hello/gm : 처음에 hello
/hello$/gm : 끝에 hello
.
(dot)은 모든 문자가 매칭됩니다.
/./gm : 모든 문자열 (*과 같은 역할)
/....../gm : 모든 6개의 문자열
.
자체의 문자를 사용하고 싶다면 이스케이프 문자를 사용해야 합니다. 이스케이프 문자는 엔터 위에 있어요. /
역슬러쉬라고도 부릅니다.대괄호를 사용하면 대괄호 안에 있는 텍스트 중 택 1 합니다. 아래의 경우 hello, hallo, hyllo
를 모두 매칭합니다.
/h[eay]llo/gm : 대괄호 안에 문자는 문자 1개에 해당
/h[ea]l../gm : 총 5개의 문자
범위를 지정하여 매칭하고 싶다면 .
(대쉬)를 사용합니다.
/h[a-f]llo/gm
/[a-zA-Z0-9]/gm : 모든 알파벳과 숫자를 찾음
/[^a-zA-Z0-9]/gm : 나머지 문자열을 찾음
해당 문자열을 제외하고 찾고 싶을 때는 부정을(^
) 사용합니다.
/h[^ae]llo/gm : 대괄호 안에 있다면 not에 의미
그루핑 규칙은 사용하기 헷갈릴 수 있지만 필요한 상황이 있으니 숙지하길 바랍니다.
/(on|ues|rida)/gm : 3개 중 매칭되는 패턴을 찾음
/(on|ues)|(rida)/gm : 그룹1(on|ues)과 그룹2(rida)로 각각 매칭되는 패턴을 찾음
/.(a|e|o)ll./gm
/hello(?!world)/gm : hello 뒤에 world가 오지 않는것
/hello(?=world)/gm : hello 뒤에 world가 오는 것
수량자는 해당문자가 몇개 있는지를 명시하여 패턴을 찾는 방식입니다. *
, +
, ?
, {}
를 사용합니다.
_* : 앞에 있는 문자가 0개 ~ N개
_+ : 앞에 있는 문자가 1개 ~ N개
_? : 앞에 있는 문자가 0개 ~ 1개
{3} : 3개
{3,} : 3개 이상
{1,3} : 1개 ~ 3개
/[0-9]{3}[-.*][0-9]{4}[-.*][0-9]{4}/gm : 010-1249-1695 or 010.2048.2593 or 010*3145*9406 매치해주는 정규표현식
/[0-9a-zA-Z]+@[0-9a-zA-Z]+.[a-zA-Z]|/gm : 올바른 이메일 주소를 매치해주는 정규표현식
모든 문자나 숫자 등 자주 사용되는 문자 패턴을 캐릭터 클래스
로 제공합니다.
/\w/gm : 워드
/\w{5}/gm : 5개의 워드(글자)
/\W/gm : not 워드
/\d/gm : 숫자
/\D/gm : not 숫자
/\s/gm : 스페이스
/\S/gm : not 스페이스
아래는 이메일 주소를 내 로직을 담아 만들어보았다.
스페이스가 없는 문자(\S
)가 숫자제한없이(+
)온 후 @표시 뒤에는 사이트주소를 담았다.
백슬러쉬
를 사용하여 이미 사용되고 있는 특수 문자를 표현
할 때 사용합니다.
/\[.*]gm : 대괄호 ([]) 안에 감싸여진 문자열
/\(.*\)/gm : 소괄호 안에 감싸여진 문자열
/\\.*\//gm : 이미 사용되고 있는 특수문자로 감싸진 문자열
/-.*-/gm : 이스케이프 문자를 사용할 필요가 없는 경우
/\^\^/gm : 이스케이프 문자가 필요한 경우
/:\)gm : 이스케이프 문자가 필요한 경우