MySQL正则表达式匹配

概述

正则表达式和MySQL有何关系?正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。MySQL用where子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤select检索出的数据。

表达式语法

基本字符匹配

基本语法如下所示:

select prod_name from products where prod_name regexp '1000'

上面的语句作用是检索列prod_name中包含文本1000的所有行。

select prod_name from products where prod_name regexp '.000'

上面的语句中的.是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符,因此,1000和2000都匹配且返回。

PS:MySQL中的正则表达式匹配不区分大小写。为区分大小写,可使用BINARY关键字,如:

where prod_name regexp binary 'jetpack .000'

进行OR匹配

为搜索两个串之一,使用|,如下所示:

select prod_name from products where prod_name regexp '1000|2000|3000'

匹配几个字符之一

匹配任何单一字符。但是,如果你只想匹配特定的字符,怎么办?可通过指定一组[]括起来的字符完成,如下所示:

select prod_name from products where prod_name regexp '[123] Ton' 

匹配范围

集合可用来定义要匹配的一个或多个字符。例如,下面的集合将匹配数字0到9:

[0123456789]

为了简化这种类型的集合,可使用-来定义一个范围。下面的式子功能等同于上述数字列表:

[0-9]

范围不限于完整的集合,[1-3]和[6-9]也是合法的范围。此外,范围不一定只是数值的,[a-z]匹配任意字母字符。

匹配特殊字符

为了匹配特殊字符,必须用\\为前导。\\-表示查找-\\.表示查找.。这种处理就是所谓的转义,正则表达式内具有特殊意义的所有字符都必须以这种方式转义。这包括.|[]\等。

匹配字符类

存在找出你自己使用的数字、所有字母字符或所有数字字母字符等匹配。为了更方便的工作,可以使用预定义的字符集,称为字符类。表列出了字符类以及他们的含义:

说明
[:alnum:] 任意字母和数字(同[a-zA-Z0-9])
[:alpha:] 任意字符
[:blank:] 空格和制表
[:cntrl:] ASCII控制字符
[:digit:] 任意数字(同[0-9])
[:print:] 任意可打印字符
[:graph:] 与[:print:]相同,但不包括空格
[:lower:] 任意小写字母(同[a - z])
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中任意字符
[:space:] 包括空格在内的任意空白字符
[:upper:] 任意大写字母
[:xdigt:] 任意十六进制

匹配多个实例

目前为止使用的所有正则表达式都视图匹配单词出现。如果存在一个匹配,改行被检索出来,如果不存在,检索不出任何行。但是有需要对匹配的数目进行更强的控制。例如,你可能需要寻找所有的数,不管书中包含多少个字。

这可以用正则的表达式重复元字符来完成。

元字符 说明
* 0个或多个匹配
+ 一个或多个匹配
? 0个或一个匹配
{n} n个数目的匹配
{n,} n个以上的匹配
{n,m} n~m个数目的匹配(m不超过255)

定位符

目前为止的所有例子都是匹配一个串中任意位置的文本。为了匹配特定位置的文本,需要使用下面给出的定位符:

元字符 说明
^ 文本的开始
$ 文本的结尾
[[:&lt:]] 词的开始
[[:>:]] 词的结尾

两仪
向上努力、不卑不亢、两仪相生

向上努力、不卑不亢、两仪相生

9.6k 声望
729 粉丝
0 条评论
推荐阅读
ThinkPHP 扩展配置注意事项
在 ThinkPHP 3.0 中引入了扩展配置。扩展配置的优先级仅次于动态配置而高于惯例配置,项目配置等。项目配置文件在部署模式的时候会纳入编译缓存,也就是说编译后再修改项目配置文件就不会立刻生效,需要删除编译...

两仪1阅读 2.7k

一次偶然机会发现的MySQL“负优化”
今天要讲的这件事和上述的两个sql有关,是数年前遇到的一个关于MySQL查询性能的问题。主要是最近刷到了一些关于MySQL查询性能的文章,大部分文章中讲到的都只是一些常见的索引失效场合,于是我回想起了当初被那个...

骑牛上青山7阅读 1.8k评论 2

分布式高可用Mysql数据库Percona XtraDB Cluster 8.0 与 Proxysql 史上最详尽用法指南
PXC是Percona XtraDB Cluster的缩写,是 Percona 公司出品的免费MySQL集群产品。PXC的作用是通过mysql自带的Galera集群技术,将不同的mysql实例连接起来,实现多主集群。在PXC集群中每个mysql节点都是可读可写的...

apollo0084阅读 7.2k评论 2

MongoDB 插入时间与更新时间(create_time/update_time)
MongoDB 在数据库层面不能像 MySQL 一样设置自动创建 create_time/update_time,自动更新 update_time

qbit阅读 14k评论 2

Mysql索引覆盖
通常情况下,我们创建索引的时候只关注where条件,不过这只是索引优化的一个方向。优秀的索引设计应该纵观整个查询,而不仅仅是where条件部分,还应该关注查询所包含的列。索引确实是一种高效的查找数据方式,但...

京东云开发者2阅读 734

封面图
SegmentFault 思否技术周刊 Vol.70 — 深入 MySQL 实战
MySQL 软件采用了 GPL( GNU 通用公共许可证),由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库。

Beverly2阅读 1.5k

封面图
MySQL 数据库索引技术原理初探
一本书 500 页的书,如果没有目录,直接去找某个知识点,可能需要找一会儿,但是借助前面的目录,就可以快速找到对应知识点在书的哪一页。这里的目录就是索引。

mylxsw1阅读 1.3k

向上努力、不卑不亢、两仪相生

9.6k 声望
729 粉丝
宣传栏