mysql正则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

时间: 2024-12-29 00:52:48

mysql正则REGEXP学习练习笔记的相关文章

MySql正则 查找筛选字段为中文的记录

在MySql中使用正则可以达到事半功倍的效果,在php,asp中都有正则表达式这一说那么mysql是怎么样的呢,下面我拿一个实例 查找筛选字段为中文的记录sql语句. 如,简单看示例,使用mysql筛选出某字段中文的记录:  代码如下 复制代码 select * from table where not name regexp '^[1-9A-Za-z]'; 实例 数据库例: entry        name         cost -----------------------------

ORACLE性能诊断―学习statspack笔记(一) [安装与测试]

oracle|笔记|性能 ORACLE性能诊断―学习statspack笔记(一)   作者:刘颖博 时间:2004-3-2 mail:liuyingbo@126.com,请指正   转载请注明出处及作者   说明:oracle8.1.6开始引进statspack,statspack是诊断oracle性能的强有力的工具   安装前准备   A.首先是系统参数的确认: job_query_processes:为了建立自动任务,执行数据收集,该参数要大于0 time_statistics:为了收集操作

ORACLE性能诊断―学习statspack笔记(二)[概述]

oracle|笔记|性能 ORACLE性能诊断―学习statspack笔记(二)[概述]   作者:刘颖博 时间:2004-3-3 mail:liuyingbo@126.com,请指正   转载请注明出处及作者   ORACLE性能诊断涉及对象   A.      服务器.网络以及磁盘(外部的环境) B.      实例(SGA,后台进程) C.      对象(表,索引,段--) D.     SQL E.      设计(指的是应用的设计,这部分一般说来是很难改变了)   ORACLE性能诊

ORACLE性能诊断―学习statspack笔记(三)[表的分类]

oracle|笔记|性能 ORACLE性能诊断―学习statspack笔记(三)[表的分类]   作者:刘颖博 时间:2004-3-10 mail:liuyingbo@126.com,请指正   转载请注明出处及作者   说明:STATSPACK并不能获取全面分析性能问题所需要的所有信息.特别是问题出在DISK,RAM,CPU以及NETWORK等数据库外部.   STATSPACK表的分类 A:控制表:stats$database_instance ,stats$snapshot B:参数表:s

ORACLE性能诊断―学习statspack笔记(四)[扩展statspack收集服务器统计]

oracle|笔记|服务器|统计|性能 ORACLE性能诊断―学习statspack笔记(四)[扩展statspack收集服务器统计]   作者:刘颖博 时间:2004-3-22 mail:liuyingbo@126.com,请指正   转载请注明出处及作者   说明:由于STATSPACK并不能获取全面分析性能问题所需要的所有信息,所以需要扩展其收集服务器的统计信息.(本文环境REDHAT Linux7.2)   VMSTAT介绍 通过STATSPACK收集服务器信息,主要通过收集VMSTAT

如何安装mysql?刚刚学习php不会用mysql,请高手指教

问题描述 如何安装mysql?刚刚学习php不会用mysql,请高手指教 如何安装mysql?刚刚学习php不会用mysql,请高手指教 解决方案 新手用集成环境,xmapp或phpnow 各关联自动完成 关于mysql的安装步骤参见: http://www.jb51.net/article/23876.htm 解决方案二: 安装的时候点击下一步.下一步,中间有几个环节需要注意: 1.端口号,默认为3306,可以根据实际情况修改. 2.用户名和密码,需要设置,在程序连接的时候需要. 3.字符集,

js正则RegExp构造函数属性详解

问个问题 一.(RegExp.$_).(RegExp["$&"])是什么意思呢? 二.我们经常看到的(RegExp.$1)又代表什么呢? 假如看了上面两个问题,你不清楚是什么意思,没有关系,这篇文章主要是讲这些正则表达式构造函数属性的.其中第一个问题符号代表正则表达式构造函数属性的简写.第二个是用于储存捕获组的构造函数属性. 正则RegExp构造函数属性 关于属性的定义,我在这里在重新提一下: input (简写为$_) 最近一次要匹配的字符串. lastMatch(简写$&a

MySQL 5.7 学习心得之安全相关特性_Mysql

1,账号安全相关的特性 1.1:创建用户 5.7版本的用户表mysql.user要求plugin字段非空,且默认值是mysql_native_password认证插件,并且不再支持mysql_old_password认证插件.5.7用户长度最大为32字节,之前最大长度为16字节,并且CREATE USER 和 DROP USER 命令里实现了 IF [NOT] EXISTS 条件判断.5.7之后用户通过grant创建用户报warning.如: grant all on *.* to dxy@lo

在MYSQL中使用正则表达式的笔记

正则表达式广泛用于各种程序编程的地方,在mysql sql语句中使用正则表达式也可以解决很多查询问题,化繁为简,并且巧妙运用可以提高mysql查询效率.本文讲讲mysql中如何使用regexp语法运行含有正则表达式的sql语句. SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name; 在mysql中sql语句使用正则表达式,在需要的地方用REGEXP关键字,如例中所示,REGEXP