정규 표현식은 때로는 매우 복잡하고 어렵게 느껴질 수 있습니다. 하지만 걱정하지 마세요! 이 글을 통해 정규 표현식의 모든 것을 파헤쳐 보겠습니다.
복잡한 문자열처럼 보이는 정규 표현식 패턴과, 그 패턴을 구성하는 각 문자가 의미하는 바를 자세히 알아보겠습니다. 이 글을 끝까지 읽으면 정규 표현식을 자유자재로 만들고 활용할 수 있게 될 것입니다. 또한, 필요에 따라 정규식을 만들고 테스트할 수 있도록 유용한 온라인 도구도 몇 가지 소개하겠습니다.
소개
정규 표현식(Regular Expression, RegEx)은 문자열 내에서 특정 패턴을 검색하기 위한 일종의 도구입니다. 간단히 말해, 문자 또는 문자열의 시퀀스를 검색하는 데 사용되는 패턴이라고 할 수 있습니다.
예를 들어, 문자열에 “apple”이라는 단어가 있는지 확인하려면 “/apple/”이라는 정규 표현식을 사용하여 문자열 내에서 검색할 수 있습니다. 또 다른 예로, “/[0-9]/”는 주어진 문자열에 0부터 9 사이의 숫자가 포함되어 있는지 확인하는 데 사용됩니다.
정규 표현식의 활용
정규 표현식은 현대 웹 개발을 비롯한 다양한 분야에서 널리 사용됩니다. 웹 양식의 유효성 검사, 웹 검색 엔진, IDE의 어휘 분석기, 텍스트 편집기 및 문서 편집기 등 다양한 곳에서 정규 표현식을 찾아볼 수 있습니다.
우리는 모두 “CTRL + F”를 사용하여 문서나 코드 내에서 특정 단어나 구를 검색한 경험이 있을 것입니다. 이러한 검색 기능은 정규 표현식 활용의 대표적인 예라고 할 수 있습니다.
본격적으로 시작하기 전에, 매우 일반적으로 사용되는 정규 표현식 하나를 살펴볼까요?
🤔 아래의 RegEx는 무엇을 의미하는 걸까요?
^([a-zA-Z0-9_-.]+)@([a-zA-Z0-9_-.]+).([a-zA-Z]{2,5})$
만약 지금 바로 추측하기 어렵더라도 걱정하지 마세요. 이 글을 끝까지 읽고 나면 분명히 이해할 수 있을 것입니다.
그럼 이제 정규 표현식의 기초부터 하나씩 알아봅시다.
토큰이란?
위에서 예시로 보여드린 정규 표현식을 자세히 살펴보면 다양한 기호, 문자, 즉 토큰으로 구성되어 있다는 것을 알 수 있습니다. 각각의 토큰이 무엇을 의미하는지 알아봅시다.
^([a-zA-Z0-9_-.]+)@([a-zA-Z0-9_-.]+).([a-zA-Z]{2,5})$
토큰 | 의미 |
^ | 문자열의 시작을 나타냅니다. |
(…) | 괄호 안에 있는 모든 것을 캡처하는 그룹을 나타냅니다. |
[…] | 대괄호 안의 문자 중 하나와 일치합니다. 예를 들어 [abc]는 a, b, c 중 하나와 일치합니다. |
a-z | 소문자 알파벳 집합 (정규 표현식은 대소문자를 구분합니다.) |
A-Z | 대문자 알파벳 집합. |
0-9 | 0부터 9까지의 숫자. |
_ | 문자 “_”와 일치합니다. |
\ | 이스케이프 문자입니다. |
. | 문자 “.”와 일치합니다. 이 기호는 정규 표현식에서 모든 문자와 일치하는 특별한 토큰이기 때문에 이스케이프 문자와 함께 사용됩니다. |
+ | 수량자입니다. 함께 사용되는 문자가 한 번 이상 나타나는 것을 의미합니다. 예를 들어, a+는 문자 a가 한 번 이상 나타남을 의미합니다. |
– | 문자 “-“와 일치합니다. |
@ | 문자 “@”와 일치합니다. |
{} | 또 다른 수량자입니다. 문자의 발생 횟수를 지정합니다. 예를 들어 a{3}는 정확히 3개의 a를 의미합니다. |
$ | 문자열의 끝을 나타냅니다. |
주어진 정규 표현식 분석
이제 토큰에 대한 기본적인 이해를 바탕으로, 위에서 제시된 복잡한 정규 표현식을 분석해 보겠습니다.
^([a-zA-Z0-9_-.]+)
는 하나 이상의 대문자 또는 소문자 영숫자, 밑줄, 하이픈 또는 점으로 시작하는 문자열을 찾고 있다는 것을 의미합니다. 예를 들어, “user_name.01″과 같은 형식이 이 패턴에 일치합니다. 여기에서 [a-zA-Z0-9_-.] 와 같이 모든 기호를 포함할 필요는 없다는 것을 알아두어야 합니다.- @ 문자는 @ 기호가 한 번 나타나는 것을 의미합니다. 이전 예시에 추가하면 “user_name.01@…”과 같이 될 수 있습니다.
([a-zA-Z0-9_-.]+)
은 첫 번째 부분과 유사하게, 하나 이상의 영숫자 문자, 밑줄, 하이픈 또는 점을 포함하는 문자열을 의미합니다. 앞선 예시에 이 부분을 추가하면 “user_name.01@domain…”과 같은 모양이 됩니다.- 이미 짐작하셨겠지만, 이 패턴은 이메일 주소를 나타내고 있습니다. 계속해서 진행하면 “.”은 문자 “.” 자체를 의미합니다. 이전 예시를 계속 이어가면 “user_name.01@domain.” 과 같은 형태가 됩니다.
([a-zA-Z]{2,5})$
는 문자열이 2~5개의 대문자 또는 소문자 알파벳 문자로 끝나야 함을 의미합니다. 이전 예시에 “.com”을 추가하면, “user_name.01@domain.com”과 같이 일반적인 이메일 주소 형식이 완성됩니다.
이 모든 내용을 종합해보면, 우리는 이메일 주소 문자열을 찾고 있다는 것을 알 수 있습니다. 이 표현식을 사용하여 이메일 주소의 유효성을 검사할 수 있습니다. 테스트한 이메일 주소가 이 패턴과 일치하면 유효한 이메일 주소라고 판단할 수 있는 것입니다.
추신 – 위 패턴은 웹에서 가장 일반적인 이메일 주소 패턴 중 하나입니다.
토큰의 종류
정규 표현식에서는 다양한 토큰을 조합하여 원하는 패턴을 만들 수 있습니다. 아래에서는 정규 표현식에서 사용되는 다양한 종류의 토큰을 살펴보고, 각 범주에서 가장 일반적으로 사용되는 토큰을 소개하겠습니다.
기본 토큰
먼저 기본 토큰부터 시작하겠습니다. 이 토큰들은 거의 모든 정규 표현식에서 사용되므로, 가장 먼저 알아야 할 부분입니다.
토큰 | 의미 |
\r | 캐리지 리턴 문자와 일치합니다. |