MySQL 支持另一种基于正则表达式和 REGEXP运算符的模式匹配操作。
- 它提供了强大而灵活的模式匹配,可以帮助我们为我们的数据库系统实现电源搜索实用程序。
- REGEXP 是执行正则表达式模式匹配时使用的运算符。 RLIKE 是同义词。
- 它还支持许多元字符,在执行模式匹配时允许更多的灵活性和控制。
- 反斜杠用作转义字符。如果使用了双反斜杠,则仅在模式匹配中考虑它。
- 不区分大小写。
Pattern | What the Pattern matches |
---|---|
* | Zero or more instances of string preceding it |
+ | One or more instances of strings preceding it |
. | Any single character |
? | Match zero or one instances of the strings preceding it. |
^ | caret(^) matches Beginning of string |
$ | End of string |
[abc] | Any character listed between the square brackets |
[^abc] | Any character not listed between the square brackets |
[A-Z] | match any upper case letter. |
[a-z] | match any lower case letter |
[0-9] | match any digit from 0 through to 9. |
[[:<:]] | matches the beginning of words. |
[[:>:]] | matches the end of words. |
[:class:] | matches a character class i.e. [:alpha:] to match letters, [:space:] to match white space, [:punct:] is match punctuations and [:upper:] for upper class letters. |
p1|p2|p3 | Alternation; matches any of the patterns p1, p2, or p3 |
{n} | n instances of preceding element |
{m,n} | m through n instances of preceding element |
举例说明:
- 匹配字符串的开头 (^):
给出所有以“sa”开头的名称。例如-sam,samart。SELECT name FROM student_tbl WHERE name REGEXP '^sa';
- 匹配字符串($):
给出所有以“on”结尾的名称。例如——norton、merton。SELECT name FROM student_tbl WHERE name REGEXP 'on$';
- 匹配它前面的字符串的零个或一个实例(?):
给出所有包含 ‘com’ 的标题。示例 – 喜剧、浪漫喜剧。SELECT title FROM movies_tbl WHERE title REGEXP 'com?';
- 匹配任何模式 p1、p2 或 p3(p1|p2|p3):
给出所有包含 ‘be’ 或 ‘ae’ 的名称。例如 – Abel、Baer。SELECT name FROM student_tbl WHERE name REGEXP 'be|ae' ;
- 匹配方括号 ([abc]) 之间列出的任何字符:
给出所有包含 ‘j’ 或 ‘z’ 的名称。示例 – Lorentz、Rajs。SELECT name FROM student_tbl WHERE name REGEXP '[jz]' ;
- 匹配 ‘a’ 到 ‘z’- ([az]) ([az] 和 (.)) 之间的任何小写字母:
检索所有包含 ‘b’ 和 ‘g’ 范围内的字母,后跟任意字符,后跟字母 ‘a’ 的所有名称。示例 – Tobias, sewall。匹配任何单个字符(.)
SELECT name FROM student_tbl WHERE name REGEXP '[b-g].[a]' ;
- 匹配方括号之间未列出的任何字符。([^abc]):
给出所有不包含 ‘j’ 或 ‘z’ 的名称。示例 – nerton、sewall。SELECT name FROM student_tbl WHERE name REGEXP '[^jz]' ;
- 匹配单词 [[:>:]] 的结尾:
给出所有以字符“ack”结尾的标题。示例 – 黑色。SELECT title FROM movies_tbl WHERE REGEXP 'ack[[:>:]]';
- 匹配单词[[:<:]]的开头:
给出所有以字符“for”开头的标题。示例——忘记莎拉·马歇尔。SELECT title FROM movies_tbl WHERE title REGEXP '[[:<:]]for';
- 匹配字符类[:class:]:
即 [:lower:]- 小写字符,[:digit:] – 数字字符等。
给出所有仅包含字母字符的标题。例如 – 奇怪的事情,复仇者联盟。SELECT title FROM movies_tbl WHERE REGEXP '[:alpha:]' ;