정규표현식 함수 REGEXP를 활용하여 구하고자 하는 조건에 맞는 데이터를 추출하는 방법에 대하여 알아보고자 한다.
정규 표현식(Regular Expression)
정규 표현식이란, 문자열을 다룰 때 문자열의 일정한 패턴을 표현하는 일종의 형식 언어이다.
따라서 요점은 '패턴을 어떻게 표현하는가' 이다.
각 패턴이 무슨 의미인지는 표로 잘 정리된 페이지들이 많을 뿐더러 표만 봐서는 잘 와닿지 않기 때문에
예제를 통해 접근해보려 한다.
예제) 이메일 양식
패턴화하고자 하는 이메일 양식의 조건은 다음과 같다.
- 이메일은 '이름@도메인.com' 과 같은 양식을 따른다.
- 이름 부분은 알파벳 대소문자 및 언더바(_)로만 이루어지며, 길이는 2~10글자이다.
- 도메인 부분은 알파벳 대소문자로만 이루어지며, 길이는 2~10글자이다.
위 조건에 따라 정규표현식을 작성해보면 아래와 같다.
SQL
SELECT email
FROM users
WHERE email REGEXP '^[a-zA-Z_]{2,10}@[a-zA-Z]+\.[a-zA-Z]{2,4}$';
정규표현식을 부분으로 나누어 살펴보자.
- ^[a-zA-Z_]{2,10}@
- ^ : 해당 기호 다음에 오는 문자로 시작된다.
- [a-zA-Z_] : a-z는 range를 표현한다. 다시말해, a~z 사이의 문자를 의미한다.
- {2, 10} : 글자의 길이가 2~10개 사이임을 의미한다.
- [a-zA-Z]+\.
- + : 앞의 문자가 한번 이상 반복된다.
- \. : 역슬래시(\)는 탈출문자이다. 점(.)이 meta 문자가 아닌 문자 그대로 사용됨을 의미한다.
- [a-zA-Z]{2,4}$
- $ : 문자열의 끝을 의미한다. 앞의 문자로 문자열이 끝남을 의미한다.
정규 표현식 관련 MySQL 함수
여담이지만 REGEXP 자체는 함수가 아니라 연산자이다. LIKE와 같은 그 연산자 말이다.
이는 위 SQL 쿼리에서 REGEXP가 쓰이는 위치와 형태를 보면 알 수 있다.
따라서 정규 표현식 처리와 관련된 함수도 정리해본다.
1. REGEXP_LIKE()
REGEXP와 유사하지만, 좀 더 명확하게 정규 표현식 매칭을 확인합니다. 보다 직관적인 문법을 제공한다.
SELECT * FROM 테이블명 WHERE REGEXP_LIKE(컬럼명, '패턴');
2. REGEXP_INSTR()
문자열에서 정규 표현식에 일치하는 패턴이 처음으로 나타나는 위치를 반환합니다. 일치하지 않으면 0을 반환한다.
SELECT REGEXP_INSTR(컬럼명, '패턴') AS 위치 FROM 테이블명;
3. REGEXP_REPLACE()
정규 표현식에 일치하는 부분을 다른 문자열로 대체한다.
SELECT REGEXP_REPLACE(컬럼명, '패턴', '대체할_문자열') AS 수정된_문자열 FROM 테이블명;
'DataBase > MySQL' 카테고리의 다른 글
[MySQL] CHAR vs VARCHAR / 기존에 알던 선택 기준이 흔들리다 (0) | 2024.06.18 |
---|---|
MySQL 문법 정리 (0) | 2022.10.12 |
MySQL 기초 (0) | 2022.07.07 |