4.5 正则表达式过滤查询数据
创始人
2024-05-27 11:24:11
0

文章目录

  • 1. 概述
  • 2. 基本字符匹配
  • 3.LIKE关键字与正则表达式的区别
  • 4.进行OR匹配
  • 5.匹配几个字符之一
  • 6.匹配范围
  • 7.匹配特殊字符
  • 8.匹配多个实例
  • 9.定位符


1. 概述

正则表达式用来匹配更加复杂的查询条件,例如你想从文件中提取电话号码,想从查找名字中间有数字的所有文件,甚至在一个文本块中查找所有重复的字符,都可以使用正则表达式完成;

但是在此处,我们只介绍MySql中正则表达式的使用,具体关于正则表达式的内容,大家可以自行学习;

MySql 用WHERE子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤SELECT查询出的数据;

2. 基本字符匹配

我们尝试查询列 prod_name 包含文本“1000”的所有行,并按照 prod_name 进行排序:

输入:

 SELECT prod_name 
FROM products
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;

输出:
在这里插入图片描述

上述的查询语句除了关键字由 LIKE 变为 REGEXP 外,其它都很像使用LIKE关键字查询的语句,它告诉 MySql :REGEXP 后所跟的所有东西作为正则表达式处理;

上面的例子使用正则表达式并没有带来什么好处,反而可能会影响查询性能,不过,我们可以参考下面的例子:

输入:

SELECT prod_name 
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_name;

输出:
在这里插入图片描述

这里使用了正则表达式.000。. 是正则表达式中一个特殊的字符,我们在JAVA基础中曾经讲过,其表示匹配任意一个字符,因此1000与2000都匹配且返回;

3.LIKE关键字与正则表达式的区别

上面的特殊案例也可以使用LIKE关键字来实现,但是要使用通配符来完成:

输入:

SELECT prod_name 
FROM products
WHERE prod_name LIKE '%000'
ORDER BY prod_name;

输出:
在这里插入图片描述

但是如果比较下列的俩个语句就会发现其区别:

SELECT prod_name 
FROM products
WHERE prod_name LIKE '1000'
ORDER BY prod_name;
SELECT prod_name 
FROM products
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;

这俩条语句第一条不会返回结果,而第二条会返回,是因为LIKE匹配整个列,如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不会被返回。而GEGEXP在列值中进行匹配,如果被匹配的文本在列值中出现,REGEXP会找到它,相应的行将会被返回。

4.进行OR匹配

为了搜索俩个值之一,使用 | ,如:

输入:

SELECT prod_name 
FROM products
WHERE prod_name LIKE '1000|2000'
ORDER BY prod_name;

输出:
在这里插入图片描述

语句使用了正则表达式1000|2000。 | 为正则表达式的OR操作符,其表示匹配其中之一,因此1000和2000都匹配并返回。

使用 | 从功能上来说类似于在SELECT语句中使用OR语句,多个OR条件可并入单个正则表达式。

5.匹配几个字符之一

如果我们只想匹配特定的字符,那么可以使用中括号 [ ] 将特定字符括起来进行正则表达式搜索,如:

输入:

SELECT prod_name 
FROM products
WHERE prod_name REGEXP '[123] ton'
ORDER BY prod_name;

输出:
在这里插入图片描述

[123]定义一组字符,表示匹配1或2或3,因此1 ton 与2 ton都匹配且返回;

[ ] 其实是另一种形式的OR语句,事实上,正则表达式[123] ton为 [1][2][3] ton的缩写,也可以使用后者,但是需要[ ] 来定义OR语句查找什么,我们可以通过下面的例子来更好的理解:

输入:

SELECT prod_name 
FROM products
WHERE prod_name REGEXP '1|2|3 ton'
ORDER BY prod_name;

输出:
在这里插入图片描述

这并不是期望的输出结果,查询出来了多余的三个行,这是因为MySql认为你给定的条件是1或2或3 ton,而不是1 ton 或2 ton 或3 ton,除非把字符 | 括在一个集合中,否则它将用于整个串;

并且字符集合也可以被否定,即,他们将匹配除指定字符外的任何东西,为了否定一个字符,需要在集合的开始位置使用 ^ 字符,[123] 匹配字符1或2或3,但是[^123] 却匹配除这些字符外的任何东西。

6.匹配范围

集合可以用来匹配范围,如:

[0123456789]

为了简化这种类型的集合,可以使用-来定义一个范围,下面的式子与上面的式子功能一样:

[0-9]

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

输入:

SELECT prod_name 
FROM products
WHERE prod_name REGEXP '[1-5] ton'
ORDER BY prod_name;

输出:
在这里插入图片描述

7.匹配特殊字符

正则表达式语言具有特定含义的特殊字符构成。假如我们需要匹配特殊字符 . 该怎么输入呢?

输入:

SELECT prod_name 
FROM products
WHERE prod_name REGEXP '.'
ORDER BY prod_name;

输出:
在这里插入图片描述

这并不是我们期望的结果,因为 . 在正则表达式中表示匹配任何一个字符,所以全部结果都会被返回看,为了匹配特殊字符,我们必须使用 \ 为前缀,\- 表示查找-,\. 表示查找 . ;

其实\也是一种特殊字符,其是转义字符,如果你想匹配 \ ,那么此时你需要输入 \\;

8.匹配多个实例

目前使用的所以正则表达式都试图匹配单次出现。如果存在一个匹配,该行被查询到,如果不存在,查不到任何结果。但有时需要对匹配数目进行更强的控制。例如,你可能需要寻找所有的数,不管数中包含多少数字,或者你可能需要查找一个单词,并且还能够适应一个尾随的s等等,如:

元字符说明
*0个或多个匹配
+1个或多个匹配
0个或1个匹配
{n}指定数目的匹配
{n,}不少于指定数目的匹配
{n,m}匹配数目的范围(m不超过255)

输入:

SELECT prod_name 
FROM products
WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
ORDER BY prod_name;

输出:
在这里插入图片描述

\\( 匹配 ( ;
[0-9] 匹配任意数字;
sticks?匹配stick和sticks,s后的?使s可选,?匹配它前面的字符的0次或1次出现;
\\)匹配 ) ;

下方是另一个例子,我们打算匹配连在一起的4位数字:

输入:

SELECT prod_name 
FROM products
WHERE prod_name REGEXP '[0-9]{4}'
ORDER BY prod_name;

输出:
在这里插入图片描述

[0-9] 匹配任意数字;
{4} 表示它前面的数字出现4次;

9.定位符

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

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

例如,我们想查找一个数开始的所有产品,简单搜索[0-9\.]肯定不行,因为它将在字符串任意位置进行查找,解决办法就是使用^定位符:

输入:

SELECT prod_name 
FROM products
WHERE prod_name REGEXP '^[0-9\\.]'
ORDER BY prod_name;

输出:
在这里插入图片描述
匹配串的开始,因此只在.或数字为第一个字母时才匹配它们,没有则要多检索出4行数据。

注意区别,^在集合中使用用来否定集合,否则用来指字符串的开始处;

相关内容

热门资讯

婚礼主持词(精选10篇) 婚礼主持词(精选10篇)  主持词的格式及写法  1.标题  一般情况下,只需写明“主持词”即可,也...
农村婚庆司仪主持词 农村婚庆司仪主持词  主持词可以采用和历史文化有关的表述方法去写作以提升活动的文化内涵。在现今人们越...
泰坦尼克号英文台词 泰坦尼克号英文台词  导语:泰坦尼克号以1912年泰坦尼克号邮轮在其处女启航时触礁冰山而沉没的事件为...
宋小宝的小品烤串台词 宋小宝的小品烤串台词  宋小宝是我国著名的喜剧演员,下面一起来欣赏宋小宝的小品烤串台词!欢迎阅读! ...
年度总结大会主持稿 年度总结大会主持稿(通用9篇)  总结是事后对某一时期、某一项目或某些工作进行回顾和分析,从而做出带...
会晚宴主持词 主题:突破·创新主持:A: B: C: D:放音乐 暖场1 暖场2晚会开始前五分钟 此音乐完毕后主持...
新世纪福音战士渚薰的经典台词 新世纪福音战士渚薰的经典台词  新世纪福音战士渚薰是具有生命之果的使徒,和凌波丽一样,是一个人造人。...
运动会开幕式流程主持词 运动会开幕式流程主持词范文(精选7篇)  根据活动对象的不同,需要设置不同的主持词。在如今这个中国,...
妙手仁心1经典台词 妙手仁心1经典台词大全  1.如果两个人有共同的秘密,表示两人的关系已是非比寻常的了。  2.喜欢一...
新婚回门宴会主持词 新婚回门宴会主持词尊敬的各位来宾,女士们,先生们:  大家中午好!  受今天新婚回门庆典主人的委托,...
销售晨会主持词开场白 销售晨会主持词开场白   篇一:销售晨会主持词  销售晨会主持词  首先在这个阳光明媚,生机昂然的早...
婚礼喝交杯酒主持词 婚礼喝交杯酒主持词范文(精选6篇)  主持词的写作要突出活动的主旨并贯穿始终。随着中国在不断地进步,...
婚宴的致辞 婚宴的致辞合集15篇  在平日的学习、工作和生活里,大家都尝试过写致辞吧,致辞具有有张有弛、错落有致...
运动会方阵解说词 运动会方阵解说词运动会方阵解说词运动会方阵解说词范文一:1、国旗解说词。女:四位旗手手执鲜艳的五星红...
功夫熊猫中的经典台词 功夫熊猫中的经典台词  1、一切都不是偶然。  2、何必躲呢,躲不过的。  3、着急的时候脑子也乱了...
《十全九美》的台词 《十全九美》的台词  1、艺人啊 要是不红那就是死 要是红了… 那是生不如死 !  2、南宫小姐被太...
中秋节晚会上的主持词 关于中秋节晚会上的主持词(精选5篇)  主持词需要富有情感,充满热情,才能有效地吸引到观众。在当下的...
民主生活会主持词 民主生活会主持词  一、主持词简介  由主持人于节目进行过程中串联节目的串联词。如今的各种演出活动和...
2022年央视春节联欢晚会主... 2022年央视春节联欢晚会主持词  借鉴诗词和散文诗是主持词的一种写作手法。在现今人们越来越重视活动...
少先队建队日主持词 少先队建队日主持词  什么是主持词  由主持人于节目进行过程中串联节目的串联词。如今的各种演出活动和...