《MySQL必知必会》正则表达式

正则表达式

1.1、关键字 REGEXP

正则表达式的使用需要用到关键字 REGEXP

select prod_name
from products
where prod_name regexp '1000';

从效果看和关键字 LIKE 有相似之处。但只从这个例子中看不出差别,而且使用正则表达式还会降低性能。

但是如果用 LIKE 替换上面的句子,是查询不到数据的。

因为 LIKE 是匹配整个列内的全文本才会返回数据,要想做到和 REGEXP 一样的效果,要使用通配符或者拼接函数才行。


正则表达式是需要配合起来使用才能看到它的扩展性。

select prod_name
from products
where prod_name regexp '.000';

. 在正则表达式中表示任意一个字符。

以上例子使用的是数字匹配,要知道 MySQL 3.23.4+ 正则表达式匹配都是不区分大小写的。

1.2、OR 匹配 ‘ | ’

select prod_name
from products
where prod_name regexp 'ton|1000|2000';

使用 | 可以起到 or 的作用,要注意,不要有多余的空格,将会影响匹配。可以给出两个或两个以上的条件。

1.3、匹配几个字符之一

select prod_name
from products
where prod_name regexp '[125] ton';

用 [ ] 定义一组字符,以上的例子表示匹配 1 2 5 三个字符。注意 ton 前是有一个空格的。匹配的是 ‘1 ton' , '2 ton' ,'5 ton' 这三个字符串。

还有一种写法,是使用 |

select prod_name
from products
where prod_name regexp '[1|2|5] ton';

得到的结果是和上面的一样的。

但是要注意,下面这样写是得不到预期结果的。

select prod_name
from products
where prod_name regexp '1|2|5 ton';

因为上面写法告诉 MySQL ,将匹配 1 , 2 ,5 ton 单个字符串

此外,还可以使用 ^ 来匹配这些字符以外的列。

select prod_name
from products
where prod_name regexp '[^123]';

^ 当然也是不能匹配 NULL 值的列的。

1.4、匹配范围

select prod_name
from products
where prod_name regexp '[1-5] ton';

' - ' 表示范围,1-5,表示1、2、3、4、5 。

a-z 表示任意字母范围。

1.5、特殊字符

上面提到 . 表示任意一个字符,那么如果需要匹配 '.' 要怎么才能让MySQL知道不去转义它?

答案是 反斜杆 \ 。

select prod_name
from products
where prod_name regexp '\\.';

还可以引用元字符:

元字符 说明
\\f 换页
\\n 换行
\\r 回车
\\t 制表
\\v 纵向制表

匹配 \ 需要 \\\ 来表示。

1.6、匹配字符类

1.7、匹配多个实例

select prod_name
from products
where prod_name regexp '\\([1-5] sticks?\\)';

\\( :匹配 ( ;\\) :匹配 )

[1-5] : 匹配数字 1 -5 的范围;

sticks? :需要拆分为 stick 和 s? 来看待,stick :匹配全文

s? : 表示 ? 前面的 s 为匹配0或1个,即为可选。

重复元字符说明如下表:

结合上表匹配字符类的元字符,还可以

select prod_name
from products
where prod_name regexp '[[:digit:]]{4}';

[:digit:] :表示匹配任意数字 ,{4} : 表示出现四次。

当然还可以有其他写法,如下:

select prod_name
from products
where prod_name regexp '[0-9][0-9][0-9][0-9]';

1.8、定位符

定位元字符说明如下:

想找以任意数字作为开头的产品名:

select prod_name
from products
where prod_name regexp '^[1-9]';

想找以任意数字作为结尾的产品名:

select prod_name
from products
where prod_name regexp '[0-9]$';

注意 ^ 的两种用法

用在[ ] 内表示否定该集合,用在 [ ] 外表示文本的开始处。

MySQL必知必会》正则表达式的更多相关文章

  1. 《MySQL必知必会》[01] 基本查询

    <MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...

  2. mysql必知必会

    春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...

  3. 《MySQL必知必会》整理

    目录 第1章 了解数据库 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 第2章 MySQL简介 2.1 ...

  4. mysql 必知必会总结

    以前 mysql 用的不是很多, 2 天看了一遍 mysql 必知必会又复习了一下基础.  200 页的书,很快就能看完, 大部分知识比较基础, 但还是了解了一些以前不知道的知识点.自己做一个备份,随 ...

  5. MySql必知必会实战练习(三)数据过滤

    在之前的博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,MySql必知必会实战练习(二)数据检索中介绍了所有的数据检索操作,下面对数据过滤操作进行总结. 1. whe ...

  6. 读《MySql必知必会》笔记

    MySql必知必会 2017-12-21 意义:记录个人不注意的,或不明确的,或不知道的细节方法技巧,此书250页 登陆: mysql -u root-p -h myserver -P 9999 SH ...

  7. MySql必知必会内容导图

    <MySQL必知必会>从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用.子查询.正则表达式和基于全文本的搜索.存储过程.游标.触发器.表约束,等等.通过重点突出的章节,条理 ...

  8. MySQL必知必会1

    MySQL必知必会 ​ 了解SQL 什么是数据库:数据库(database)保存有阻止的数据的容器,可以把数据库想象成一个文件柜. 什么是表:表(table) 某种特定类型结构的结构化清单,数据库中的 ...

  9. 《MySQL必知必会》学习笔记——前言

    前言 MySQL已经成为世界上最受欢迎的数据库管理系统之一.无论是用在小型开发项目上,还是用来构建那些声名显赫的网站,MySQL都证明了自己是个稳定.可靠.快速.可信的系统,足以胜任任何数据存储业务的 ...

随机推荐

  1. 构建私有的verdaccio npm服务

    用了很长一段时间的cnpmjs做库私有库,发现两个问题 1. 最开始是mysql对表情emoij的支持不好,但由于数据库没办法调整所以只好把第三方库都清掉,只留私有库 2. mac 上面cnpm in ...

  2. GitOps初阶指南:将DevOps扩展至K8S

    本文转自Rancher Labs 在过去十年的编程中,出现了一些革命性的转变.其中之一是源于围绕DevOps的实践,它将开发和运维团队整合到一个共享的工作流程中,此外还有持续集成和持续交付(CI/CD ...

  3. PHP array_reduce() 函数

    实例 发送数组中的值到用户自定义函数,并返回一个字符串: <?phpfunction myfunction($v1,$v2){return $v1 . "-" . $v2;} ...

  4. duoxiao OJ #910 【高手训练】【动态规划】梦中漫步 期望 LCA

    LINK:梦中漫步 当然也可以去一本通的Oj/loj上交(loj可能没有.. 期望好题.期望和dp往往是在一起的. 前置知识:1. 期望是线性可加的.2.和的期望等于期望的和. 从u出发每次随机选一条 ...

  5. java -jar .jar中没有主清单属性

    pom里加上 <build> <plugins> <plugin> <groupId>org.springframework.boot</grou ...

  6. “商家参数格式有误”应用切微信H5支付完美解决方案

    一.业务场景发生 最近在跟一些合作公司作业务对接,在对方的APP中接入我们的H5支付,包括微信和支付宝. 那就开搞,进展顺利,貌似一切都在掌握之中,给到对方一个链接即可调起支付.形如: https:/ ...

  7. PHP+Redis实现高并发下商品超卖问题

    对于一些有一定用户量的电商网站,如果只是单纯的使用关系型数据库(如MySQL.Oracle)来做抢购,对数据库的压力是非常大的,而且如果不使用好数据库的锁机制,还会导致商品.优惠券超卖的问题.我所在的 ...

  8. Kaggle-pandas(3)

    Summary-functions-and-maps 教程 在上一教程中,我们学习了如何从DataFrame或Series中选择相关数据. 正如我们在练习中所展示的,从我们的数据表示中提取正确的数据对 ...

  9. Android 的Glide、TabLayout、RecyclerView(下一章补充)。

    今天的内容主要和一些依赖有关, //Glide依赖implementation 'com.github.bumptech.glide:glide:4.11.0'//Google Design依赖//n ...

  10. Vue组件注册

    全局注册方法 Vue.component('my-component-name', { // ... 选项 ... }) Vue.component('component-a', { /* ... * ...