其中,“属性名”表示需要查询的字段名称;“匹配方式”表示以哪种方式来匹配查询。“匹配方式”中有很多的模式匹配字符,它们分别表示不同的意思。下表列出了 REGEXP 操作符中常用的匹配方式。
选项
说明
例子
匹配值示例
^
匹配文本的开始字符
'^b' 匹配以字母 b 开头的字符串
book、big、banana、bike
$
匹配文本的结束字符
'st$' 匹配以 st 结尾的字符串
test、resist、persist
.
匹配任何单个字符
'b.t' 匹配任何 b 和 t 之间有一个字符
bit、bat、but、bite
*
匹配零个或多个在它前面的字符
'f*n' 匹配字符 n 前面有任意个字符 f
fn、fan、faan、abcn
+
匹配前面的字符 1 次或多次
'ba+' 匹配以 b 开头,后面至少紧跟一个 a
ba、bay、bare、battle
<字符串>
匹配包含指定字符的文本
'fa' 匹配包含‘fa’的文本
fan、afa、faad
[字符集合]
匹配字符集合中的任何一个字符
'[xz]' 匹配 x 或者 z
dizzy、zebra、x-ray、extra
[^]
匹配不在括号中的任何字符
'[^abc]' 匹配任何不包含 a、b 或 c 的字符串
desk、fox、f8ke
字符串{n,}
匹配前面的字符串至少 n 次
'b{2}' 匹配 2 个或更多的 b
bbb、bbbb、bbbbbbb
字符串
{n,m}
匹配前面的字符串至少 n 次, 至多 m 次
'b{2,4}' 匹配最少 2 个,最多 4 个 b
bbb、bbbb
MySQL 中的正则表达式与 Java 语言、PHP 语言等编程语言中的正则表达式基本一致。
查询以特定字符或字符串开头的记录
字符^用来匹配以特定字符或字符串开头的记录。
例 1
在 tb_students_info 表中,查询 name 字段以“J”开头的记录,SQL 语句和执行过程如下。
mysql> SELECT * FROM tb_students_info
-> WHERE name REGEXP '^J';
+—-+——+——+——+——–+———–+
| id | name | age | sex | height | course_id |
+—-+——+——+——+——–+———–+
| 4 | Jane | 22 | 男 | 162 |
3 |
| 5 | Jim | 24 | 女 | 175 |
2 |
| 6 | John | 21 | 女 | 172 |
4 |
+—-+——+——+——+——–+———–+
3 rows in set (0.01 sec)
例 2
在 tb_students_info 表中,查询 name 字段以“Ji”开头的记录,SQL 语句和执行过程如下。
mysql> SELECT * FROM tb_students_info
-> WHERE name REGEXP '^Ji';
+—-+——+——+——+——–+———–+
| id | name | age | sex | height | course_id |
+—-+——+——+——+——–+———–+
| 5 | Jim | 24 | 女 | 175 |
2 |
+—-+——+——+——+——–+———–+
1 row in set (0.00 sec)
查询以特定字符或字符串结尾的记录
字符$用来匹配以特定字符或字符串结尾的记录。
例 3
在 tb_students_info 表中,查询 name 字段以“y”结尾的记录,SQL 语句和执行过程如下。
mysql> SELECT * FROM tb_students_info
-> WHERE name REGEXP 'y$';
+—-+——-+——+——+——–+———–+
| id | name | age | sex | height | course_id |
+—-+——-+——+——+——–+———–+
| 1 | Dany | 25 | 男 | 160 |
1 |
| 3 | Henry | 23 | 女 | 185 |
1 |
| 7 | Lily | 22 | 男 | 165 |
4 |
+—-+——-+——+——+——–+———–+
3 rows in set (0.00 sec)
例 4
在 tb_students_info 表中,查询 name 字段以“ry”结尾的记录,SQL 语句和执行过程如下。