正则表达式用来匹配文本的特殊的串(字符集合)。正则表达式用正则表达式语言来建立,正则表达式语言是用来完成匹配特殊的串的一种特殊语言。
Regexp关键字告诉MySQL后面所跟的东西作为正则表达式处理。
以下使用student、courses、classes表查询
student表
image.png
courses表
image.png
classes表
image.png
查询s_name 中有有 ‘王’字的姓名(与like关键字类似)
select s_no,s_sex,s_name from student where s_name REGEXP BINARY '王' order by s_name;
image.png
查询coursesname中包含H的名字,不区分大小写
select * from courses s where s.coursesname REGEXP 'H' order by s.coursesname;
image.png
利用关键字REGEXP BINARY 关键字,可以进行大小写区分。
select * from courses s where s.coursesname REGEXP BINARY 'h' order by s.coursesname;
image.png
Regexp 进行OR匹配
‘|’ 表示OR操作符,它表示匹配其中之一,因此H和J都匹配并返回
多个OR条件,可以利用单个正则表达式进行匹配。
select * from courses s where s.coursesname REGEXP 'H|J' order by s.coursesname;
image.png
Regexp 进行特定字符匹配
Regexp 匹配几个字符之一,利用 [] 表示、另一种形式的OR
王[丽|红|艳] == 王丽 或者王红 或者王艳 为 王[丽|红|艳] 的缩写
select s_no,s_sex,s_name from student where s_name REGEXP '王[丽|芳]' order by s_name;
image.png
也可以不带括号:
select s_no,s_sex,s_name from student where s_name REGEXP '王|丽|芳' order by s_name;
image.png
Regexp 进行范围匹配
[0-9] 0到9数字匹配
[a-z] a到z字母匹配
select * from classes s where s.classname REGEXP 'p[A-Z]' order by s.classname;
image.png
select * from classes s where s.classname REGEXP 'py[0-9]' order by s.classname;
image.png
Regexp 进行特殊字符匹配
特殊字符匹配,多数的正则表达式实现是使用单个的反斜杠进行转义特殊字符
select * from classes s where s.classname REGEXP '\\.' order by s.classname;
image.png
匹配连在一起的3位数字
select * from classes s where s.classname REGEXP '[[:digit:]]{3}' order by s.classname;
select * from classes s where s.classname REGEXP '[0-9]{3}' order by s.classname;
image.png
^匹配字符串的开始位置
select * from classes s where s.classname REGEXP '^p' order by s.classname;
image.png
$ 匹配字符串的结束位置
select * from classes s where s.classname REGEXP '#$' order by s.classname;
image.png
$ 匹配字符串最后三个字符是数字
select * from classes s where s.classname REGEXP '[0-9]{3,}$' order by s.classname;
image.png
^ 与 $ 的结合使用
查询以p开头1结尾中间有两个任意字符的记录
select * from classes s where s.classname REGEXP '^p..1$' order by s.classname;
image.png