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

实战测试

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');

MYSQL正则表达式_第1张图片

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,}';

你可能感兴趣的:(MYSQL)