简介

正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较,在搜索子句中使用正则表达式,必须使用REGEXP操作符

实例

基本字符匹配

选出学生姓名中包含“赵六”的学生

1
SELECT * FROM t_student WHERE student_name REGEXP "赵六";

选出学生姓名以一个字符+“赵六”开头的学生,一个.匹配一个字符

1
SELECT * FROM t_student WHERE student_name REGEXP '.赵六';

区分大小写

正则表达式默认是不区分大小写的,要区分大小写就使用BINARY关键字

选出学生姓名中包含“a”的学生,如果不使用BINARY关键字就选出学生姓名中包含“a”或“A”的学生

1
SELECT * FROM t_student WHERE student_name REGEXP BINARY 'a';

OR匹配

|为正则表达式的OR操作符,它表示匹配其中之一

选出学生姓名中包含“张三”或“赵六”的学生

1
SELECT * FROM t_student WHERE student_name REGEXP '张三|赵六';

匹配几个字符之一

只想匹配特定的字符,可通过指定一组用[]括起来的字符来完成

选出学生姓名中包含“1赵六”或“2赵六”的学生

1
SELECT * FROM t_student WHERE student_name REGEXP '[12]赵六';

匹配范围

[0123456789]可以用[0-9]替换

[abc…xyz]可以用[a-z]替换,MySQL的正则表达式是不区分大小写的,要区分大小写就使用BINARY关键字

选出学生姓名中包含“1赵六”或者“2赵六”或者…或者“9赵六”的学生

1
SELECT * FROM t_student WHERE student_name REGEXP '[0-9]赵六';

匹配特殊字符

正则表达式语言由具有特定含义的特殊字符构成,常见的正则表达式特殊字符有:.[]|-等,还有一些其它特殊字符,如果需要匹配这些字符,那么就要在这些特殊字符前加\\

选出学生姓名中包含“-”的学生

1
SELECT * FROM t_student WHERE student_name REGEXP '\\-';

选出学生姓名中包含“\”的学生,匹配反斜杠\则需要四个反斜杠

1
SELECT * FROM t_student WHERE student_name REGEXP '\\\\';

匹配字符类

说明
[:alnum:] 任意字母和数字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表(同[\t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与[:print:]相同,但不包括空格
[:lower:] 任意小写字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在内的任意空白字符(同[\f\n\r\t\v])
[:upper:] 任意大写字母(同[A-Z])
[:xdigit:] 任意十六进制数字(同[a-fA-F0-9])

选出学生姓名中包含两个连续数字的学生,[[:digit:]]表示任意数字,{2}表示连续两个

1
SELECT * FROM t_student WHERE student_name REGEXP '[[:digit:]]{2}';

定位符

^ :文本的开始

选出学生姓名中以“32”开头的学生

1
SELECT * FROM t_student WHERE student_name REGEXP '^32';

$ :文本的结尾

选出学生姓名中以“12”结尾的学生

1
SELECT * FROM t_student WHERE student_name REGEXP '12$';