Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL REGEXP 연산자 완벽 정리 – 정규 표현식으로 패턴 매칭하기

MySQL은 정규 표현식(regular expression)에 기반한 또 다른 패턴 매칭 방식을 지원하며, 이를 위해 REGEXP 연산자를 사용합니다. REGEXP는 단순한 와일드카드 검색에 그치는 LIKE 연산자와 달리, 훨씬 강력하고 유연하게 문자열 패턴을 검색할 수 있습니다.

아래 표는 REGEXP 연산자와 함께 사용할 수 있는 주요 패턴과 각 패턴이 일치하는 대상을 정리한 것입니다.

패턴일치하는 내용
^문자열의 시작
$문자열의 끝
.임의의 단일 문자
[...]대괄호 안에 나열된 문자 중 하나
[^...]대괄호 안에 나열되지 않은 문자 중 하나
p1|p2|p3교차 선택(alternation); p1, p2, p3 중 어느 하나라도 일치하면 참
*바로 앞의 요소가 0회 이상 반복
+바로 앞의 요소가 1회 이상 반복
{n}바로 앞의 요소가 정확히 n회 반복
{m,n}바로 앞의 요소가 m회 이상 n회 이하로 반복

REGEXP 사용 예제

REGEXP의 활용 방법을 살펴보기 위해 다음과 같은 데이터를 가진 'Student_info' 테이블을 사용해 보겠습니다.

mysql> Select * from Student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
|  101 | YashPal | Amritsar   | History    |
|  105 | Gaurav  | Chandigarh | Literature |
|  130 | Ram     | Jhansi     | Computers  |
|  132 | Shyam   | Chandigarh | Economics  |
|  133 | Mohan   | Delhi      | Computers  |
+------+---------+------------+------------+
5 rows in set (0.00 sec)

이제 위 테이블의 'Name' 컬럼에서 원하는 패턴을 찾기 위해 REGEXP를 활용하는 몇 가지 쿼리를 살펴보겠습니다.

1. 특정 문자로 시작하는 이름 찾기

mysql> Select Name from student_info WHERE Name REGEXP '^Y';
+---------+
| Name    |
+---------+
| YashPal |
+---------+
1 row in set (0.11 sec)

위 쿼리는 'Y'로 시작하는 모든 이름을 조회합니다. 캐럿(^) 기호가 문자열의 시작 위치를 의미하기 때문입니다.

2. 특정 문자열로 끝나는 이름 찾기

mysql> Select name from student_info WHERE Name REGEXP 'am$';
+-------+
| name  |
+-------+
| Ram   |
| Shyam |
+-------+
2 rows in set (0.00 sec)

위 쿼리는 'am'으로 끝나는 모든 이름을 조회합니다. 달러($) 기호는 문자열의 끝을 나타냅니다.

3. 특정 문자열을 포함하는 이름 찾기

mysql> Select name from student_info WHERE Name REGEXP 'av';
+--------+
| name   |
+--------+
| Gaurav |
+--------+
1 row in set (0.00 sec)

위 쿼리는 이름의 어느 위치든 'av'를 포함하는 모든 이름을 조회합니다. 패턴에 ^나 $ 같은 위치 지정 기호가 없으면, REGEXP는 해당 패턴이 문자열 내 어디에라도 등장하는지 검사합니다.

4. 복합 조건으로 이름 찾기

mysql> Select name from student_info WHERE Name REGEXP '^[aeiou]|am$';
+-------+
| name  |
+-------+
| Ram   |
| Shyam |
+-------+
2 rows in set (0.00 sec)

위 쿼리는 모음(a, e, i, o, u)으로 시작하거나 'am'으로 끝나는 모든 이름을 조회합니다. 파이프(|) 기호는 OR 조건처럼 동작하여, 두 패턴 중 하나만 만족해도 결과에 포함됩니다.

이처럼 REGEXP 연산자를 활용하면 LIKE 연산자로는 표현하기 어려운 복잡한 문자열 조건도 간결하고 직관적으로 처리할 수 있습니다.