MySql-正则表达式
Posted DataTalk 用数据说话
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql-正则表达式相关的知识,希望对你有一定的参考价值。
前言
正则表达式是用来匹配文本特殊的字符集合的。本文主要介绍一些正则表达式的匹配规则,主要内容有:
1、简单的正则表达式测试
2、基本字符匹配
4、匹配几个字符之一
5、匹配范围
6、匹配特殊字符
7、匹配字符类
8、匹配多个实例
9、定位符
1
简单的正则表达式测试
-- select 待验证的字符串 from regexp 字符串规则;
-- 返回1则表示能匹配到;返回0则表示匹配不到。
SELECT 'abc' REGEXP 'a';-- 返回1
2
基本字符匹配
-- 查找user_name中包含'001'的用户;
select * from regexp_test
where user_name regexp '001';
-- 返回'a001','b001','ab001','c001','cb001'
-- .表示匹配任意一个字符
select * from regexp_test
where user_name regexp '.b001';
-- 返回'ab001','cb001'
3
进行or匹配
'X1|X2|X3':表示匹配X1或X2或X3
select * from regexp_test
where user_name regexp 'a001|b001';
-- 返回'a001','b001','ab001','cb001'
4
匹配几个字符之一
'[X1X2X3]Y':表示匹配X1Y或X2Y或X3Y
'[^X1X2X3]Y':表示匹配X1Y或X2Y或X3Y之外的文本,如X4Y
select * from regexp_test
where user_name regexp '[^ab]001';
-- 返回'c001'
5
匹配范围
匹配规则 |
匹配内容 |
备注 |
[a-z] |
匹配所有的小写字母 |
在正则表达式中默认不区分大小写,如果要强制区分大小写,则需要添加关键字 binary |
[A-Z] |
匹配所有的大写字母 |
|
[a-zA-Z] |
匹配所有的字母 |
|
[0-9] |
匹配所有的数字 |
无 |
-----匹配所有的小写字母
select * from regexp_test
where user_name regexp binary '[a-z]';
-- 返回'a001','a002','b001','ab001','c001','aa','a01','to be continued','cb001','begin'
-----匹配所有的大写字母
select * from regexp_test
where user_name regexp binary '[A-Z]';
-- 返回'AA'
-----匹配所有的字母
select * from regexp_test
where user_name regexp binary '[a-zA-Z]'
等价于
select * from regexp_test
where user_name regexp '[A-Z]'
等价于
select * from regexp_test
where user_name regexp '[a-z]'
-- 返回'a001','a002','b001','ab001','c001','AA','aa','a01','to be continued','cb001','begin'
------匹配所有的数字
select * from regexp_test
where user_name regexp '[0-9]';
-- 返回'a001','a002','b001','123456789','ab001','c001','a01','cb001'
6
匹配特殊字符
匹配规则 |
匹配内容 |
\\f |
换页 |
\\n |
换行 |
\\r |
回车 |
\\t |
制表 |
\\v |
纵向制表 |
7
匹配字符类
匹配规则 |
匹配内容 |
[: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\\t\\r\\v]) |
[:upper:] | 任意大小字母(同 [A-Z]) |
[:xdigit:] | 任意十六进制数字(同 [a-fA-F0-9]) |
select * from regexp_test
where user_name regexp '[[:digit:]]';
-- 返回'a001','a002','b001','123456789','ab001','c001','a01','cb001'
8
匹配多个实例
匹配规则 |
匹配内容 |
* |
匹配前面的子表达式0次或多次,等价于{0,} |
+ |
匹配前面的子表达式一次或多次,等价于{1,+} |
? |
匹配0个或1个,等价于{0,1} |
{n} |
匹配确定的n次 |
{n,m} |
n和m均为非负整数,且n<=m,最少匹配n次且最多匹配m次 |
select * from regexp_test
where user_name regexp binary 'ab*001';
-- 返回'a001'和'ab001'
select * from regexp_test
where user_name regexp binary 'ab+001';
-- 返回'ab001'
select * from regexp_test
where user_name regexp binary 'ab?001';
-- 返回'a001'和'ab001'
select * from regexp_test
where user_name regexp binary 'ab{1}001';
-- 返回'ab001'
select * from regexp_test
where user_name regexp binary 'ab{0,1}001';
-- 返回'a001'和'ab001'
9
定位符
匹配规则 |
匹配内容 |
^ |
文本的开始 |
$ |
文本的结束 |
[[:<:]] |
词的开始 |
[[:>:]] |
词的结束 |
---------返回以a开始的文本
select * from regexp_test
where user_name regexp binary '^a';
-- 返回'a001','a002','ab001','aa','a01'
---------返回以a结束的文本
select * from regexp_test
where user_name regexp binary 'a$';
-- 返回'aa'
-----------返回含有be单词的字符串
select * from regexp_test
where user_name regexp '[[:<:]]be[[:>:]]'
-- 返回'to be continued'。并不返回'begin'
-- 比较^$与[[:<:]]、[[:>:]]
-- ^与$限制的是整个字符串,而[[:<:]]与[[:>:]]限制的是字符串中的词
SELECT 'to be continued' REGEXP '[[:<:]]be[[:>:]]'; #结果是1
SELECT 'to be continued' REGEXP '^be$'; #结果是0
扫码关注
END
以上是关于MySql-正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性