정규 표현식이란?
프로그래밍에서 문자열을 다룰 때, 문자열의 일정한 패턴을 표현하는 일종의 형식 언어를 말한다. 정규식이라고도 부른다. 정규 표현식은 사용되는 언어마다 문법이 조금씩 다를 수도 있다.
정규 표현식 | 의미 | 자세한 설명 |
abc | Letters | abc 글자 그대로 일치 |
123 | Digits | 123 숫자 그대로 일치 |
. | Any Character | 1개의 아무 문자 일치 (조커카드. 줄바꿈 문자를 제외한 모든 문자를 표현할 수 있다. 빈칸도 가능하고, 특수문자도 가능하다) |
\. | Period | 마침표 (마침표를 찾으려면, 이스케이프 문자인 역슬래쉬(\)를 앞에 붙인다) |
활용 1. 단일 문자 조건 나타내기
- 대괄호( [ ] ) 는 단일 문자의 조건을 나타낼 때 사용한다.
- 대괄호( [ ] ) 안에 존재하는 문자 모두 일치(AND)가 아니라, 하나의 원소라도 일치(OR)하는 단일 문자를 찾는다.
- 대괄호( [ ] ) 안에 캐럿( ^ ) 이 맨 앞에 있는 경우, 캐럿( ^ ) 뒤에 나오는 원소들을 제외하는 조과 일치하는 문자를 찾는다.
- 대괄호( [ ] ) 안에 하이픈 ( - ) 이 원소 사이에 있는 경우, 하이픈 앞뒤를 포함하는 범위에 해당하는 문자를 찾는다. 대괄호안에서 하이픈을 문자 자체로 찾으려면 이스케이프 문자인 역슬래쉬(\)를 앞에 붙여야한다. (대괄호 밖에서는 하이픈이 문자 자체로 사용되므로 이스케이프 문자를 앞에 붙일 필요가 없다.)
정규 표현식 | 의미 | 자세한 설명 |
[abc] | Only a, b, or c | a 또는 b 또는 c |
[^abc] | Not a, b, nor c | a 또는 b 또는 c 를 제외한 문자중 하나 |
[a-z] | Characters a to z | a 부터 z 까지의 글자 중 하나 |
[A-Za-z] | Characters A to Z, Characters a to z | a 부터 z 까지의 글자 중 하나 (대문자도 포함) |
[0-9] | Numbers 0 to 9 | 0 부터 9 까지의 숫자 중 하나 |
[^0-9] | Not Numbers | 숫자 제외한 문자중 하나 |
[가-힣] | 한글 | 한글의 첫 번째 글자 '가' 부터 마지막 글자 '힣' 까지의 문자 중 하나 (단, 이 방식으로는 ㄱㄴㄷ이나 ㅏㅑㅓㅕ같은 낱글자는 찾을 수 없음) |
이스케이프 문자인 역슬래쉬(\) 뒤에 문자를 붙여 표현하는 방법도 있다.
정규 표현식 | 의미 | 자세한 설명 |
\w | Any Alphanumeric character | 대소문자를 포함한 모든 글자와 숫자와 언더바(_) 중 하나 (언더바를 제외한 특수문자는 제외) 👉 [A-Za-z0-9_] 와 같은 표현 |
\W | Any Non-alphanumeric character | 대소문자를 포함한 모든 글자와 숫자와 언더바(_)를 제외한 문자 중 하나 👉 [^A-Za-z0-9_] 와 같은 표현 |
\d | Any Digit | 0 부터 9 까지의 숫자 중 하나 👉 [0-9] 와 같은 표현 |
\D | Any Non-digit character | 숫자 제외한 문자중 하나 👉 [^0-9] 와 같은 표현 |
\s | Any Whitespace | 공백 문자 |
\S | Any Non-whitespace character | 공백 문자를 제외한 문자 중 하나 |
활용 2. 반복되는 문자 패턴 나타내기
- 'abc' 라는 문자열 찾기 위한 정규 표현식은, \w 이 아니라 \w\w\w 이렇게 작성해야한다.
- 이렇게 글자 n개와 일치하는 반복 문자 패턴을 찾기 위한 정규 표현식이 있다.
- 중괄호 ( { } ) 를 사용하여 표현하거나, 미리 정의된 반복 회수를 다양한 메타 문자로 지정하여 표현할 수도 있다.
정규 표현식 | 의미 | 자세한 설명 |
{m} | m Repetitions | 문자가 딱 m개 있는 경우 |
{m,n} | m to n Repetitions | 문자가 m개 이상 n개 이하로 있는 경우 |
{m,} | more than m Repetitions | 문자가 m개 이상 있는 경우 (최소 m개 이상만 있으면 일치함) |
? | Optional character | 없거나, 하나가 있는 경우 |
* | Zero or more repetitions | 없거나, 하나 이상 있는 경우 |
+ | One or more repetitions | 하나 이상 있는 경우 (아예 없으면 일치하지 않음) |
^... | Starts | 특정 문자로 시작하는 경우 |
…$ | Ends | 특정 문자로 끝나는 경우 |
활용 3. 소괄호로 그룹화하여 패턴 만들기
예제 1
can
man
fan
위 문자열과 매칭되는 정규 표현식을 작성할 때, 두 가지 방식으로 나타낼 수 있다.
[cmf]an -- 방법 1
(c|m|f)an -- 방법 2
방법 1은 시작하는 문자에 대해 c 또는 m 또는 f 일 경우 매칭될 수 있도록 대괄호를 사용해서 단일 문자에 대한 조건을 나타내었고, 방법 2는 시작하는 문자에 대해 여러 패턴 중 하나를 선택해서 매칭될 수 있도록 소괄호를 사용해서 패턴에 대한 조건을 그룹화하여 나타내었다. 소괄호 안의 (|) 기호는 OR를 의미한다.
예제 2
cat
dog
위 문자열과 매칭되는 정규 표현식을 작성할 때, 두 가지 방식으로 나타낼 수 있다.
[a-z]{3} -- 방법 1
(cat|dog) -- 방법 2
방법 1은 소문자 알파벳 하나와 매칭하는 단일 문자가 총 3번 반복해서 나오는 경우를 나타내었다. 방법 2는 여러 패턴 중 하나를 선택해서 매칭될 수 있도록 소괄호를 사용했다. 문자열이 cat 또는 dog 와 정확하게 일치할 경우를 나타내었다.
정규표현식은 처음 이해할 때는 어렵지 않으나, 막상 필요한 순간에 본격적으로 사용하려고 하면 생각한 것보다 원하는 패턴을 깔끔하게 쓰는게 꽤 어렵다. 정규 표현식을 능숙하게 사용하려면 많은 연습이 필요할 것 같다.
'데이터 처리 도구 > SQL' 카테고리의 다른 글
[MySQL] WITH절 사용하여 CTE 생성하기 (0) | 2024.07.28 |
---|---|
[MySQL] 정규표현식 함수 (Regular Expressions) (0) | 2024.07.11 |
[MySQL] 집합 연산(1): UNION, UNION ALL 사용하여 조회 결과 결합하기 (0) | 2022.09.07 |
[MySQL] 비트 연산과 관련 함수(CONV, BIN, BIT_LENGTH) (0) | 2022.09.04 |
[MySQL] 날짜/시간 다루기 (2) 연산하기 (0) | 2022.08.30 |