教程集 www.jiaochengji.com
教程集 >  数据库  >  mysql  >  正文 mysql正则REGEXP学习练习笔记

mysql正则REGEXP学习练习笔记

发布时间:2023-05-01   编辑:jiaochengji.com
教程集为您提供mysql正则REGEXP学习练习笔记等资源,欢迎您收藏本站,我们将为您提供最新的mysql正则REGEXP学习练习笔记资源
REGEXP在mysql是用来执行正则表达式的一个函数,像php中的preg之类的函数了,regexp正则函数如果只是简单的查询使用like即可,但复杂的还是需要使用regexp了,下面我们来看看。

MySql用户手册建议,在构造简单查询时,仍使用通配符。


如:Select [*|fieldname list] From [tablename] where [fieldname] like ["%someletter"|"%someletter%","_","?someletter"];

但在一些特殊查询中,不用正则表达式是不行的。MYSQL提供的正则表达式WHERE谓词有三个,分别是:
REGEXP, RLIKE, NOT RLIKE
用这三个替换原有的LIKE谓词,后面即可以跟正则表达式。

例如要查询字段中含有“_”的数据,则要用以下查询语句:

SELECT * FROM TABLENAME WHERE FIELDNAME RLIKE '.[_].';

扩展正则表达式的一些字符是:

· ‘.’匹配任何单个的字符。

· 字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。

· “ * ”匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符。

如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。
为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。
为了找出以“b”开头的名字,使用“^”匹配名字的开始:

使用正则

SELECT * FROM pet WHERE name REGEXP BINARY ‘^b’;
SELECT * FROM pet WHERE name REGEXP ‘fy$’;
SELECT * FROM pet WHERE name REGEXP ‘w’;
SELECT * FROM pet WHERE name REGEXP ‘^…..$’;
SELECT * FROM pet WHERE name REGEXP ‘^.{5}$’;


今天在应用中遇到了这样的一个问题,
有一个字段 t1,其中的值类似于:1,1,1,2,3,3,4,4,5,5,2,4,3,2,1,2

需要从里面搜索出比如说:第一个逗号前的数字范围为3-5之间,第三个逗号前的数字的范围为3-5之间,第10个逗号前的数字范围为3-5之间,其余的都为1-5之间。。。

则sql语句可以这么写:

    SELECT * FROM tb WHERE t1 REGEXP '^[3-5],[1-5],[3-5],[1-5],[1-5],[1-5],[1-5],[1-5],[1-5],[3-5],[1-5],[1-5],[1-5],[1-5],[1-5],[1-5]%';

1. 使用LIKE和NOT LIKE比较操作符(注意不能使用=或!=);

2. 模式默认是忽略大小写的;

3. 允许使用”_”匹配任何单个字符,”%”匹配任意数目字符(包括零字符);


附一些mysql正则规则

^                         匹配字符串的开始部分

$                         匹配字符串的结束部分

.                          匹配任何字符(包括回车和新行)

a*                       匹配0或多个a字符的任何序列

a                        匹配1个或多个a字符的任何序列

a?                       匹配0个或1个a字符

de|abc               匹配序列de或abc

(abc)*                匹配序列adc的0个或者多个实例

 

{n}、{m,n}        {n}或{m,n}符号提供了编写正则表达式的更通用方式,能够匹配模式的很多前述原子(或“部分”)。m和n均为整数。

a*              可被写为a{0,}

a               可被写为a{1,}

a?              可被写为a{0,1}

 

[a-dX]                 匹配任何是a,b,c,d或者X的字符,两个其他字符之间的’-'字符构成一个范围

[^a-dX]               匹配任何不是a,b,c,d或者X的字符,前面的字符’^'是否定的意思

 

[.characters.]  在括号表达式中(使用[和]),匹配用于校对元素的字符序列,字符为单个字符或新行等字符名

mysql> SELECT ‘~’ REGEXP ‘[[.~.]]’;                                                        -> 1

mysql> SELECT ‘~’ REGEXP ‘[[.tilde.]]’;                                                 -> 1

 

[=character_class=]

在括号表达式中(使用[和]),[=character_class=]表示等同类。它与具有相同校对值的所有字符匹配,包括它本身,

[[=a=]]              等同于[a( )],[a ],[a{1,}]

 

[:character_class:]

在括号表达式中(使用[和]),[:character_class:]表示与术语类的所有字符匹配的字符类。

标准的类名称是:

alnum       文字数字字符

alpha        文字字符

blank         空白字符

cntrl          控制字符

digit          数字字符

graph        图形字符

lower        小写文字字符

print          图形或空格字符

punct        标点字符

space        空格、制表符、新行、和回车

upper        大写文字字符

xdigit        十六进制数字字符

 

[[:<:]], [[:>:]]

这些标记表示word边界。它们分别与word的开始和结束匹配。word是一系列字字符,其前面和后面均没有字字符。字符是alnum类中的字母数字字符或下划线(_)。

mysql> select ‘fang shan zi’ regexp ‘[[:<:]]shan[[:>:]]’;             -> 1

mysql> select ‘fang shan zi’ regexp ‘[[:<:]]fang[[:>:]]’;              -> 1

mysql> select ‘fang shans zi’ regexp ‘[[:<:]]shan[[:>:]]’;           -> 0

 

正则表达式使用特殊字符,应在其前面加上2个反斜杠’'字符

mysql> SELECT ’1 2′ REGEXP ’1 2′;                       -> 0

mysql> SELECT ’1 2′ REGEXP ’1 2′;                      -> 0

mysql> SELECT ’1 2′ REGEXP ’1\ 2′;                     -> 1

您可能感兴趣的文章:
MySql正则表达式的用法实例分享
分享:Mysql 5.0存储过程学习总结
mysql having与where的用法区别在哪?
javascipt正则表达式反向引用的例子
boosting和bootstrap区别
零基础Python学习路线图,Python初学者必须要了解,让你少走弯路
参加php培训班有用吗
go编程之简单正则表达式使用
django框架难学么
mysql正则表达式搜索

[关闭]
~ ~