MySQL-正则表达式

Posted 测试家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL-正则表达式相关的知识,希望对你有一定的参考价值。

概述

前面的一讲我们已经了解到mysql可以通过 LIKE ...% 来进行模糊匹配,MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表达式匹配。

实例

基本字符匹配

select employee_name from yw_employee where employee_name regexp '王'
该语句检索列employee_name包含文本王的所有行
select employee_name from yw_employee where employee_name regexp '.张'
该语句中的正则表达式(.),是正则表达式语言中的一个特殊字符,表示匹配任意一个字符(该语句也可以使用like和通配符完成)
like和regexp的区别:
like匹配整个列
select employee_name from yw_employee where employee_name like '王'
该SQL语句将不返回数据,因为like匹配整个列,如果被匹配的文本在列值中出现,like将不会找到它,相应的行也不会被返回(除非使用通配符%)
regexp在列值内进行匹配
select employee_name from yw_employee where employee_name regexp '王'
该SQL语句会返回一行数据,如果被匹配的文本在列值中出现,regexp将会找到它,相应的行将被返回(如果希望regexp匹配整个列值,使用^和$定位符{anchor})即可
进行or匹配

select employee_name from yw_employee where employee_name regexp '王|李'

or表示匹配其中之一,功能与select语句中的or语句,多个or条件可并入单个正则表达式

匹配几个字符之一

select employee_name from yw_employee where employee_name regexp '[薛]占国'

[]是另一种形式的or语句,作用是匹配指定的(其中之一)字符;正则表达式[薛占]国为[薛|占|]国的缩写,它的意思是匹配薛或者占字符集合也可以被否定,即匹配除指定字符外的任何东西,为否定一个字符集,可以在集合开始处设置一个‘^’例如[^薛占]([]定义更准确,|如果不括起来,则应用于整个串)

匹配范围

集合可以用来定义要匹配的一个或多个字符

比如[010203040506070809],为了简化这种类型的集合,可使用(-)来定义一个范围,即[0-9];(范围不仅仅局限于数值,还可以使字母字符等)

匹配特殊字符

正则表达式由具有特定含义的特殊字符构成;如果要匹配这些特殊字符,就需要用\\为前导;\\-表示查找-,\\.表示查找.。

select employee_name from yw_employee where employee_name regexp '\\薛'

这种处理方式就是所谓的转义(escaping),正则表达式内具有特殊意义的所有字符都必须以这种方式转义;(为了匹配反斜杠{\}字符本身,需要使用\\\)  

例:多数正则表达式实现使用单个反斜杠转义特殊字符,以便能够使用这些字符本身,而MySQL要求两个反斜杠(MySQL自己解释一个,正则表达式库解释一个)  \\也用来引用元字符(具有特殊含义的字符),如下:

匹配字符类

字符类(character class):有时候需要检索出我们需要的数字、所有字母字符或所有数字字母字符等的匹配,我们可以使用预定义的字符集,称为字符类;如下:

MySQL-正则表达式

匹配多个实例

有时候需要对匹配的数目进行更强的控制,比如:寻找所有的数,不管数中包含多少数字,或寻找一个单词并尾随一个s(如果存在)等情况,我们可以利用正则表达式中的重复元字符来完成;如下

定位符

有时候为了匹配特定位置的文本,需要使用定位符,常用定位符列表如下:

以上就是mysql正则表达式相关的知识, 大家学到了吗,欢迎点赞、评论、打赏作者,更多知识点将在后续继续分享学习。

以上是关于MySQL-正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

MySQL正则表达式

MySQL正则表达式问题

mysql支不支持正则表达式里的零宽断言

MySQL正则表达式匹配

MySQL 正则表达式

MySQL中REGEXP正则表达式使用大全