본문 바로가기
Dev

정규표현식 (Regular Expression) 간단히 알아보기

by Day0404 2021. 4. 14.
728x90
반응형

정규표현식 (Regular Expression)

위키백과에 따르면

정규 표현식(正規表現式, 영어: regular expression, 간단히 regexp 또는 regex, rational expression) 또는 정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식언어이다. 정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있으며, 특히 펄과 Tcl은 언어 자체에 강력한 정규 표현식을 구현하고 있다.

일부는 펄, 자바스크립트, 루비, Tcl 처럼 문법에 내장되어 있는 반면 닷넷, 자바, 파이썬, POSIX, C, C++ (C++ 이후)에서는 표준 라이브러리를 통해 제공한다. 그 밖의 대부분의 언어들은 별도의 라이브러리를 통해 정규 표현식을 제공한다.

한마디로 어떠한 텍스트 내에서 특정한 규칙을 가진 문자열을 찾기 위해 그 형태나 규칙을 나타내는 패턴 정도로 생각하면 될 것 같습니다.

정규식은 항상 필요성은 느끼지만 공부해야지 공부해야지 하다가 미루기만 했던 내용입니다..(다들 그러시죠..?ㅎㅎ)

그래도 더이상 미루고만 있을 순 없어서 겉할기 만이라도 공부하자라는 느낌으로 정규식에 대한 공부를 하면서 글을 쓰게되었습니다.

 

정규표현식 기본 문법

크게 3가지 정도로 나눈다고 합니다.

  1. 패턴 그대로를 매칭하는 경우 : Ctrl + F 에서 “찾기” 기능을 통해서 특정 단어를 찾는 것 처럼, 단어 그대로를 패턴으로 사용하여 매치되는 영역을 찾는다.
  2. 메타문자 및 수량 한정자를 적용하는 경우 : 정규식 패턴에 쓰이는 문자중에는 특별한 의미를 가지는 메타 문자들이 있는데, 이들을 사용하여 보다 폭넓은 패턴에 매치할 수 있다.
  3. 그룹 및 look around 기능을 사용하는 경우 : 패턴의 일부를 그룹으로 묶거나, 특정 패턴의 앞 뒤로 다른 패턴이 오는 조건을 더하는 경우.

정규표현식 사용법

기본적인 정규표현식

/패턴/플래그

  • 슬래시(/) 사이에는 매칭시킬 패턴을 입력한다.
  • 슬래시(/) 다음에는 옵션을 설정하는 플래그를 입력한다.

(플래그 는 하나만 찾을지, 모두 다 찾을지 등을 설정하는 옵션이라고 생각하시면 됩니다.)

문자,숫자,기호 등을 매칭하는 패턴

 

패턴

설명

a-zA-Z

영어만 (하이픈(-) 으로 범위 지정 가능)

ㄱ-ㅎ가-힣

한글만 (하이픈(-) 으로 범위 지정 가능)

0-9

숫자만 (하이픈(-) 으로 범위 지정 가능)

.

줄바꿈 제외 모든 문자열

\d

숫자

\D

숫자가 아닌 것

\w

영어, 숫자, 언더바(_)

\W

\w 를 제외한 모든 것

\s

공백 (스페이스)

\특수문자

특수문자

검색 패턴

패턴

설명

|

or

[]

대괄호 안의 문자중 일치하는 것

[^문자]

대괄호 안의 문자를 제외한 것

^문자열

해당 문자열로 시작하는 것

문자열$

해당 문자열로 끝나는 것

()

그룹 검색 및 분류 (capturing group)
문자로 지정할 수 있으며, 괄호 사이에 존재하는 표현식을 통해 찾은 결과를 묶음으로 처리할 수 있도록 해줌

(?:패턴)

그룹 검색 (Non-capturing group)

\b

단어의 처음과 끝

\B

단어의 처음과 끝을 제외

capturing group 은 이해를 했지만 Non-capturing group 을 제대로 이해하지 못하여 추가적으로 쓸 예정

특정 패턴이 몇번 반복되는 지 관련

물음표 (?)

물음표 (?) 는 앞의 문자와 0 또는 1회 일치

ex) 아래와 같은 문자열이 있다는 가정하에 /192\.\168\.1\.\d\d?/gm 로 검색을 하면 마지막열에 1자리 또는 2자리 숫자가 포함된 IP 주소가 검색됩니다.

 

더하기 기호 (+)

더하기 기호(+)는 앞의 문자와 1회 이상 일치

ex) 똑같은 예제에 더하기 기호(+) 로 바꿔주었습니다. 마지막 부분에 2자리 이상 숫자가 포함된 IP 주소와 일치하는 것을 확인할 수 있습니다.

별표 (*)

별표 (*) 는 앞의 문자와 0회 이상 일치

ex) 마찬가지로 같은 예제를 별표 (*) 로 바꿔주었습니다.. 0번 혹은 그 이상 일치하는 것

 

플래그

기호 설명

g

Global: 모든 문자 검색(안 쓰면 매칭되는 첫 문자만 검색)

i

Ignore Case: 대소문자 구분 안함

m

Multi line: 여러 행의 문자열에 대해 검색

자주 쓰는 정규식 예제

E-mail 주소

/^[a-z0-9_+.-]+@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/

전화번호 (123-123-1234 or 123-1234-1234)

/\d{2,3}-\d{3,4}-\d{4}/

비밀번호 (숫자,영문,특수문자 각 1자리 + 8자리 ~ 16자리)

/^(?=.*[a-zA-z])(?=.*[0-9])(?=.*[$`~!@$!%*#^?&\\(\\)\-_=+]).{8,16}$/

 

.jpg, .gif, .png 확장자를 가진 파일명

/([^\s]+(?=\.(jpg|gif|png))\.\2)/

주민번호 하이픈 (-) 포함

/^(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}$/

 

정규식에 대한 글은 처음이라 간단하게나마 알아봤습니다. 이 다음 정규식에 대한 내용은 지금보다 깊게 공부하여 숙달이 되면 다시 쓰지 않을까 싶습니다.

반응형

댓글