MySQL 정규 표현식
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|p3 | 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。 |
* | 匹配前面的子表达式零次或多次。例如,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)가 나열되어 있습니다.
이름 필드에서 'st'로 시작하는 모든 데이터를 찾습니다.
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';가 모두 찾습니다. 이름 필드에서 'ok'으로 끝나는 데이터:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';는 이름 필드에서 'mar' 문자열을 포함하는 모든 데이터를 찾습니다:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';는 이름 필드에서 모음 문자로 시작하고 'ok' 문자열로 끝나는 모든 데이터를 찾습니다.
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
관련 비디오 튜토리얼 권장 사항: