English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MySQL 정규 표현식

이전 장에서 알 수 있듯이, MySQL은 다음과 같이 LIKE ...% 불확정 일치를 수행합니다。

MySQL은 다른 정규 표현식 일치를도 지원합니다. MySQL에서는 REGEXP 연산자를 사용하여 정규 표현식 일치를 수행합니다。

PHP나 Perl을 이해한다면, MySQL의 정규 표현식 일치는 이들 스크립트와 유사하므로 매우 간단합니다。

아래 표의 정규 표현식 모델은 REGEXP 연산자에 적용될 수 있습니다。

모델설명
^입력 문자열의 시작 위치와 일치시킵니다. RegExp 객체의 Multiline 속성이 설정되면, '^'는 '\n' 또는 '\r' 후의 위치와 일치시킵니다。
$입력 문자열의 끝 위치와 일치시킵니다. RegExp 객체의 Multiline 속성이 설정되면, '$'는 '\n' 또는 '\r' 전의 위치와 일치시킵니다。
.또는 "\n"를 제외한 어떤 단일 문자와 일치시킵니다. '\n'를 포함한 어떤 문자와 일치시키려면 '[.\n]'과 같은 패턴을 사용하세요。
[...]문자 집합입니다. 포함된 어떤 문자 중 하나와 일치시킵니다. 예를 들어, '[abc]'는 "plain"에서 'a'와 일치시킵니다。
[^...]부정 문자 집합입니다. 포함되지 않은 어떤 문자도 일치시킵니다. 예를 들어, '[^abc]'는 "plain"에서 'p'와 일치시킵니다。
p1|p2|p3p와 일치시킵니다1 또는 p2 또는 p3。예를 들어, 'z|food'는 "z" 또는 "food"와 일치합니다。'(z|f)ood'는 "zood" 또는 "food"와 일치합니다。
*앞의 서브표현식을 0번 이상 일치시킵니다. 예를 들어, zo* 는 "z"와 "zoo"와 일치합니다。* 와 동의어입니다 {0,}。
+앞의 서브표현식을 한 번 이상 일치시킵니다. 예를 들어, 'zo+'은 "zo"와 "zoo"와 일치하지만, "z"와 일치하지 않습니다。+ 와 동의어입니다 {1,}。
{n}n은 비농도 정수입니다. 정확한 n번 일치시킵니다. 예를 들어, 'o{2}'을 "Bob"에서 'o'와 일치시키지 못하지만, "food"에서 두 개의 'o'와 일치시킬 수 있습니다。
{n,m}m과 n은 모두 비부정수이며, n <= m입니다. 최소 n번 최대 m번으로 최소匹配 합니다。

온라인 예제

이러한 정규 표현식 요구 사항을 이해한 후, 필요한 경우 정규 표현식을 포함한 SQL 문을 작성할 수 있습니다. 아래에 몇 가지 간단한 예제(테이블 이름: person_tbl)를 나열하여 이해를 돕겠습니다:

name 필드에서 'st' 문자열로 시작하는 모든 데이터를 찾습니다:

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';

name 필드에서 'ok' 문자열로 끝나는 모든 데이터를 찾습니다:

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

name 필드에 'mar' 문자열이 포함된 모든 데이터를 찾습니다:

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';

name 필드에서 자음 문자로 시작하거나 'ok' 문자열로 끝나는 모든 데이터를 찾습니다:

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';