MYSQL正则表达式

MYSQL正则表达式

MYSQL的正则表达式REGEXP默认是模糊匹配,即包含的就算匹配成功,可以使用定位符进行精准匹配。

LIKE匹配默认是精准匹配,可以使用通配符进行模糊匹配。

regexp 'abc' 不区分大小写

regexp binary 'abc' 区分大小写

1、基本字符匹配

符号作用
.任意一个字符,如.xyz
^匹配开始,如^ab
$匹配结束,如xy$
|或匹配,如[a|b|c]
[]列表单个字符匹配,如[123]
[^]列表反向单个字符匹配,如[^123]
[a-z]范围匹配,如[0-9] [a-z]
\\转义字符,用了匹配. - | \ [] ^ $
\\f匹配换页符
\\n匹配换行符
\\r匹配回车
\\t匹配横向制表符
\\v匹配纵向制表符

2、匹配字符类

字符类备注
[:alnum:]任意字母和数字[a-zA-Z0-9]
[:alpha:]任意字符[a-zA-Z]
[:blank:]空格和制表符
[:cntrl:]ASCII控制字符
[:dight:]任意数字[0-9]
[:graph:]任意可打印字符 ,不包括空格
[:lower:]任意小写字母[a-z]
[:upper:]任意大写字母[A-Z]
[:print:]任意可打印字符
[:punct:]既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:]包括空白在内的任意空白字符
[:x​digit:]任意十六进制数字[a-fA-F0-9]

3、前一个字符匹配多次

正则表达式中,默认只有匹配出来和匹配不出来,但是不好控制匹配某个字符的次数。

符号作用
*匹配前一个字符0次或多次、0次以上
+匹配前一个字符1次或多次、1次以上
?匹配前一个字符0次或1次
{n}匹配前一个字符n次
{n,}匹配前一个字符n次以上(包括n)
{n,m}匹配前一个字符n次到m次(n<m)(包括n和m)

实战测试

1、建立测试表

DROP TABLE IF EXISTS ex;
CREATE TABLE ex(
  name varchar(30) DEFAULT NULL
);
INSERT INTO ex (name) VALUES ('.xy');
INSERT INTO ex (name) VALUES ('.xyz');
INSERT INTO ex (name) VALUES ('axyz');
INSERT INTO ex (name) VALUES ('axy');
INSERT INTO ex (name) VALUES ('bxy');
INSERT INTO ex (name) VALUES ('bxyz');
INSERT INTO ex (name) VALUES ('12xy');
INSERT INTO ex (name) VALUES ('21xy');
INSERT INTO ex (name) VALUES ('#ab');
INSERT INTO ex (name) VALUES ('\\ab');
INSERT INTO ex (name) VALUES ('ababab');
INSERT INTO ex (name) VALUES ('aaaabbb');
INSERT INTO ex (name) VALUES ('121212aaa');

在这里插入图片描述

2、测试

-- mysql的正则表达式,默认都是模糊查询,即包含关键字的就算匹配成功。

-- 匹配包含三个字符,第一个字符随意,后面两个是ab
select * from ex where name REGEXP '.ab';

-- 匹配以a开头的字符串
select * from ex where name REGEXP '^a';

-- 匹配以y结尾的字符串
select * from ex where name REGEXP 'y$';

-- 匹配以1或者2开头的字符串
select * from ex where name REGEXP '^[1|2]';

-- 匹配拥有axy以外字符的字符串
select * from ex where name REGEXP '[^axy]';

-- 匹配含有小写字母的字符串
select * from ex where name REGEXP '[a-z]';

-- 匹配含有大写字母、小写字母、数字的字符串
select * from ex where name REGEXP '[[:alnum:]]';

-- 匹配含有小写字母的字符串
select * from ex where name REGEXP '[[:lower:]]';

-- 匹配包含a后面有0个或多个b的字符串
select * from ex where name REGEXP 'ab*';

-- 匹配包含a后面有0个或1个b的字符串
select * from ex where name REGEXP 'ab?';

-- 匹配包含a后面有1或多个b的字符串
select * from ex where name REGEXP 'ab+';

-- 匹配包含a后面有2个b的字符串
select * from ex where name REGEXP 'ab{2}';

-- 匹配包含a后面有1个或2个b的字符串
select * from ex where name REGEXP 'ab{1,2}';

-- 匹配包含a后面有2个或2个以上b的字符串
select * from ex where name REGEXP 'ab{2,}';
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值