MySQL 正则表达式查询

正则表达式用来匹配文本的特殊的串(字符集合)。正则表达式用正则表达式语言来建立,正则表达式语言是用来完成匹配特殊的串的一种特殊语言。

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

你可能感兴趣的:(MySQL 正则表达式查询)