码迷,mamicode.com
首页 > 数据库 > 详细

MySQL ----- 使用正则表达式进行搜索 regexp (八)

时间:2020-05-25 00:18:40      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:情况下   ping   冲突   部分   字母   一个   测试   info   语句   

正则表达式: 用来匹配文本的特殊的字符集合。

注意:

  1、正则表达式比较复杂,前面灵活使用基本够用

  2、所有种类的程序设计语言,文本编辑器、操作系统等都支持正则表达式

  3、正则表达式使用正则表达式语言建立的,所以想要使用的顺滑,就要学会他的特殊语法和指令

简单使用,正则表达式语言的一个子集,MySQL 正则表达式

1、用一下

-- 检索商品名中含有 ton 的商品
 select prod_id,prod_name,prod_price from products where prod_name REGEXP ton order by prod_price;

技术图片

 注意:  like 与regexp  的区别:就是 like 匹配整个列值,要的是整体。regexp 匹配这个列值中的有没含有,属于他的一部分就行

  1、like 匹配整个列,如果匹配的文本正在列值中出现,like 将不会找到他,相应的行也不会被返回(除非与通配符连用)

  2、regexp 在列值内进行匹配,如果被匹配的文本在列值中出现,regexp 就会找到他,将相应的行返回。

 

2、区分大小写匹配

MySQL 默认是不区分大小写的,要区分的话可以使用 binary  关键字区分大小写

-- 查看商品名中含有T的商品
select prod_id,prod_name,prod_price from products where prod_name regexp binary T order by prod_price;

技术图片

 

 3、进行或 (|)匹配,像之前的OR 一样,满足其中之一就行

-- 检索商品名中含有ton 或1000 的商品
 select prod_id,prod_name,prod_price from products where prod_name regexp ton|1000 order by prod_price;

技术图片

 

 注意: | 为正则表达式的或操作符,表示满足其中之一就会匹配返回,使用方式与or 基本一致,两个后多个条件多个|

4、匹配特定字符

 

-- 查找商品名中含有的  五个字符中,第一个字符是12的商品

select prod_id,prod_name,prod_price from products where prod_name regexp [12] ton order by prod_price;

技术图片

因此,[ ]  是 or 语句的另一种形式,[12] 相当于[1|2] , 但是要用中括号包裹起来,表示 1或2 开头的某某

与 1|2 ton 还是有区别的

-- 查找商品名称含有 1 或 2 ton 的商品
 select prod_id,prod_name,prod_price from products where prod_name regexp 1|2 ton order by prod_price;

技术图片

 

 

 可以查找指定之外的 [^12]

技术图片

 

 

 

5、匹配范围

集合用来定义要匹配的一个或多个字符,如 [0123456789] 可以简化为 [0-9] ,其中 -  表示从0到9 的一个范围

-- 查找商品名中含有的  五个字符中,第一个字符是0到9之间 的商品
select prod_id,prod_name,prod_price from products where prod_name regexp [0-9] ton order by prod_price;

技术图片

 

 

6、匹配特殊字符

之前已经了解的三个特殊符号

  表示匹配所有的(.)

  表示或的(|)

  表示范围的(-)

那么要查询商品名中含有那些与特殊钢符号冲突的怎么办,

  使用  \\. 进行转义(escaping)

-- 查找商品名中含有 . 的商品
select prod_id,prod_name,prod_price from products where prod_name regexp \\. order by prod_price;

技术图片

 

 两个反斜杠也可以用来引用元字符(具有特殊含义的字符)

技术图片

 

 注意:

  1、要匹配反斜杠(\) 需要使用 \\\

  2、多数正则表达是需要使用单个反斜杠,才能使用字符本身,但是Mysql 要求两个(Mysql 解释一个,正则表达式库解释一个)

 

 

7、字符类

字符类(character class): 使用预定义的字符集,找出常用的数字,所有字母字符或数字字符

技术图片

 

 

-- 检索商品名中含有 任意数字的商品
select prod_id,prod_name,prod_price from products where prod_name regexp [[:digit:]] order by prod_price;

技术图片

 

 

8、匹配多个实例

检索多个实例,

--  匹配商品名中含有 ([0-9] sticks) 或 ([0-9] stick) 的商品,
--  其中第二的字符为任意数字,其中?前面的哪个s 可能有可能没有
 select prod_id,prod_name,prod_price from products where prod_name regexp \\([0-9] sticks?\\) order by prod_price;

技术图片

 

 

 重复元字符

技术图片

 字符类和重复元字符连用

-- 检索商品名中有四个数字连在一起的商品
select prod_id,prod_name,prod_price from products where prod_name regexp [[:digit:]]{4} order by prod_price;

技术图片

 

 

9、定位符  

匹配特定位置的文本

技术图片

-- 检索商品名中以任意一个数(包括小数点)开始的产品
select prod_id,prod_name,prod_price from products where prod_name regexp ^[0-9\\.] order by prod_price;

技术图片

注意:

  1、^ 有两个作用,一是在集合中用来否定集合,二是指字符串的开始处

  2、利用定位符,以^ 开始和以$ 结束的每个表达式,可以匹配整个字符串,起到和 like 一样的作用

 

简单的正则表达式测试:

在不使用数据库表的情况下用select 来测试正则表达式,regexp 检查总是返回0(没有匹配)或1(匹配)

技术图片

 

MySQL ----- 使用正则表达式进行搜索 regexp (八)

标签:情况下   ping   冲突   部分   字母   一个   测试   info   语句   

原文地址:https://www.cnblogs.com/obge/p/12942905.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!