정규표현식이란 (1)

💻 Programming

정규 표현식 (Regular Expression)

안녕하세요, 케이치입니다.

오늘은 정규표현식이 무엇인지 그리고 문법은 어떻게 되며 어떻게 사용하는지에 대해서 알아보겠습니다.

 

정규표현식이란?

- 정규표현식(regular expression)이란 검색 패턴을 정의한 문자열이라고 정의할 수 있습니다. regex 또는 regexp로 줄여서 말하기도 하며 pattern이라고 하기도 합니다. 정규표현식은 보통 임의의 string 내에서 특정 패턴에 일치하는 문자나 문자열을 찾아내거나(find) 찾아서 변경(find and replace)할 때 매우 유용하게 사용됩니다. 참고로 정규표현식의 개념은 1950년대에 미국의 수학자 Stephen Cole Kleene에 의해서 시작되었다고 합니다. 

 

정규표현식의 기본문법

 

Boolean "or"

 | swim|swam 는 "swim" 또는 "swam" 글자와 매칭됩니다

 

Grouping

소괄호를 이용하여 그룹을 지정할 수 있습니다.

예를들어 sw(i|a)m 패턴은 바로 위 예제와 동일하게 "swim"과 "swam" 단어와 매칭됩니다.

 

수량(개수) 패턴

 ?  : 바로 앞에 있는 글자 또는 그룹이 0~1개 존재

 *  : 바로 앞에 있는 글자 또는 그룹이 0개 이상 존재

 +  : 바로 앞에 있는 글자 또는 그룹이 1개 이상 존재

{n} : 바로 앞에 있는 글자 또는 그룹이 정확히 n번 존재

{min,} : 바로 앞에 있는 글자 또는 그룹이 최소 min 개 존재

{min,max} : 바로 앞에 있는 글자 또는 그룹이 최소 min 이상 최대 max 이하 존재

 

와일드카드 (Wildcard)

 .  : 와일드카드 문자는 아무 캐릭터(any character)를 의미합니다. 그냥 어떤 글자이던 특수기호인지 알파벳인지 숫자인지에 관계없이 1개의 character를 의미합니다. 즉, a.b 패턴은 a와b 사이에 어떤 문자가 와도 매칭됩니다. "acb", "a3b", "aAb" 등등이 모두 매칭되죠. 이 와일드카드 문자와 수량을 나타내는 *를 함께 사용하여 a.*b 패턴으로 매칭을 시도하면 "a123b", "ab", "aTTb" 등의 문자열이 모두 매칭이 가능합니다. 즉, a와 b 사이에 0개 이상의 문자가 들어있는 문자열이 매칭이 됩니다.

 

이외 기본 패턴

 ^  : 문자열의 시작

 $  : 문자열의 끝

[ ] : 대괄호 내의 문자들 중 하나의 문자와 매칭

[^ ] : 대괄호 내의 문자들을 포함하지 않는 문자와 매칭

 

Expression Flags

g : global

i : case insensitive

m : multiline

s : single line

u : unicode

y : sticky

 

정규표현식 패턴 예제

정규표현식 패턴설명일치 문자열
^x- 소문자 x로 시작하는 문자열"xyz song"
a$
- 문자열 끝에 공백이나 줄바꿈 문자가 있을경우 매칭 X
"blah bla"
a.c- 소문자 a와 c 사이에 하나의 문자가 있는 문자열
"Javascript is easy"
a+- 소문자 a가 1번 이상 반복됨

"I am a boy"
a*- 소문자 a가 0번 이상 반복됨ba* -> "b", "ba", "baa"
a?- 소문자 a가 1번 존재하거나 존재하지 않는 케이스 
a|b- 소문자 a 또는 소문자 b 
(a)- 소문자 a를 그룹화 
(a)(b)- 그룹1에 소문자 a, 그룹 2에 소문자 b 매칭 
a{n}- 소문자 a가 n번 반복되는 문자열 
a{min,}- 소문자 a가 최소 min번 반복되는 문자열 
a{min,max}- 소문자 a가 최소 min번, 최대 max번 반복되는 문자열 
[ab]- 소문자 a 또는 b"I am a boy"
[^ab]- 소문자 a와 b를 제외한 다른 문자"cab"
[a-z]- 소문자 a부터 z사이의 문자중 하나 
[^a-y]- 소문자 a부터 y가 아닌 다른 문자"abcz"
\^특수문자 ^를 패턴내에 포함시킬 때 사용 
\ddigit (숫자) 
\D숫자가 아닌 문자 
\s공백문자 
\S공백문자가 아닌 문자 
\ttab 문자 
\vvertical tab 문자 
\w알파벳, 숫자, _ 문자 
\W(알파벳, 숫자, _ 문자)가 아닌 문자 

 

 

실제로 테스트를 해보기 위해서는 여러 온라인 사이트들이 존재하는데요, 저는 아래 사이트를 애용합니다.

테스트 문자열도 마음대로 입력해볼 수 있고 패턴을 입력하면 자동으로 매칭되는 문자들을 컬러링해줍니다.

기본적인 텍스트가 입력되어있어서 원하는대로 패턴을 입력해보고 기대하던 매칭이 이루어 지는지 바로바로 확인이 가능합니다

https://regexr.com/

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

 

또한, 정규식이 어떤 의미를 갖는지 도식화 해주는 사이트도 있는데요, 여기도 이용해볼만 합니다.

작성한 정규식이 정확히 어떤 의미를 갖는지 실제 패턴 매칭 테스트 만으로는 애매할 때 이용하면 좋습니다.

https://regexper.com/

 

Regexper

 

regexper.com

 

이상으로 정규표현식에 대해서 간략히 내용을 정리해보았습니다.