MySql-正则表达式

Posted DataTalk 用数据说话

tags:

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


前言

正则表达式是用来匹配文本特殊的字符集合的。本文主要介绍一些正则表达式的匹配规则,主要内容有:


1、简单的正则表达式测试

2、基本字符匹配

3、进行or匹配

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_testwhere user_name regexp binary '[a-z]';-- 返回'a001','a002','b001','ab001','c001','aa','a01','to be continued','cb001','begin'
-----匹配所有的大写字母select * from regexp_testwhere user_name regexp binary '[A-Z]';-- 返回'AA'
-----匹配所有的字母select * from regexp_testwhere user_name regexp binary '[a-zA-Z]'等价于select * from regexp_testwhere user_name regexp '[A-Z]'等价于select * from regexp_testwhere user_name regexp '[a-z]'-- 返回'a001','a002','b001','ab001','c001','AA','aa','a01','to be continued','cb001','begin'
------匹配所有的数字select * from regexp_testwhere 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_testwhere 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_testwhere user_name regexp binary 'ab*001';-- 返回'a001'和'ab001'
select * from regexp_testwhere user_name regexp binary 'ab+001';-- 返回'ab001'
select * from regexp_testwhere user_name regexp binary 'ab?001';-- 返回'a001'和'ab001'
select * from regexp_testwhere user_name regexp binary 'ab{1}001';-- 返回'ab001'
select * from regexp_testwhere user_name regexp binary 'ab{0,1}001';-- 返回'a001'和'ab001'

9

定位符

匹配规则
匹配内容
^
文本的开始
$
文本的结束
[[:<:]]
词的开始
[[:>:]]
词的结束
---------返回以a开始的文本select * from regexp_testwhere user_name regexp binary '^a';-- 返回'a001','a002','ab001','aa','a01'
---------返回以a结束的文本select * from regexp_testwhere user_name regexp binary 'a$';-- 返回'aa'
-----------返回含有be单词的字符串select * from regexp_testwhere user_name regexp  '[[:<:]]be[[:>:]]'-- 返回'to be continued'。并不返回'begin'
-- 比较^$与[[:<:]]、[[:>:]]-- ^与$限制的是整个字符串,而[[:<:]]与[[:>:]]限制的是字符串中的词SELECT 'to be continued' REGEXP '[[:<:]]be[[:>:]]';  #结果是1SELECT 'to be continued' REGEXP '^be$';  #结果是0



MySql-正则表达式

MySql-正则表达式


扫码关注




END

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

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

MySql-正则表达式

MySQL从入门到精通50讲-MySQL正则表达式及事务