본문 바로가기
DataBase/MySQL

[MySQL] 정규표현식 연산자 REGEXP로 이메일 양식 검증 해보기

by Dev_Green 2024. 10. 23.

정규표현식 함수 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