정규표현식

NASTAR·2023년 4월 17일
0
post-thumbnail

정규표현식

정규표현식이란 무엇일까?

프로그래밍에서 문자열을 다룰 때, 문자열의 일정한 패턴을 표현하는 일종의 형식 언어
보통 RegEx 혹은 RegExp라 많이 쓴다.

정규표현식 sample text가 있어 먼저 소개하겠습니다.
https://regexr.com/5nvc2

정규표현식을 입력하는 공간이 위에 나와있으며 뒤에 gm이라 붙어있는 것은 flag이다. flag에 대한 설정은 오른쪽 상단에서 할 수 있습니다. gglobal로 모든 문자열에서, mmultiline으로 여러 라인에서 패턴을 찾겠다는 옵션입니다.

정규표현식 입력란에 //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 : 이스케이프 문자가 필요한 경우


정규표현식을 배워보았다. 정규표현식을 처음 봤을 때는 너무나 어려워보여 학습에 어려움을 겪을것 같았지만 정규표현식의 구조를 이해하니 이해하기도 쉬웠다. 그리고 정규표현식은 특정 상황에서 강력한 도구가 되겠구나라는 것을 깨달았다. 이를 이용해 앞으로 코딩테스트를 볼 때, 프로젝트시 적절한 상황에서 정규표현식을 사용할 것이다. 오늘도 성장한 나를 칭찬해줘야지😊😊

0개의 댓글