MySQL使用正则表达式
简介
正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较,在搜索子句中使用正则表达式,必须使用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$'; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LeDao's Blog!
评论