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:] | 包括空白在内的任意空白字符 |
[:xdigit:] | 任意十六进制数字[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,}';