mysql bc_正则表达式——MySQL搜索过滤

正则表达式介绍

在数据库的数据过滤过程中只用WHERE子句和LIKE操作符都是对于已知值进行的

不管是匹配一个还是多个值,测试大于还是小于已知值,或者检查某个范围的值,都是使用已知的值

当然MySQL语句也提供了通配符百分号(%)和下划线(_)来匹配多个和单个字符

在检索名中包含某些文本或字符的字段时确实很有用,但是这种功能也是有代价的

因为通配符和搜索的处理一般要比有些搜索所花时间要长,而且会使WHERE子句本身过于复杂

这也就是正则表达式变得有用的地方,所有程序设计语言、文本编辑器、操作系统等都支持正则表达式

正则表达式是用来匹配文本的特殊串,用正则表达式语言来建立,所以这也是你必须所学习的特殊语法和指令

全文阅读和自己练习尝试需要大概十五分钟左右,熟练运用SQL语句中还得需要你自己不断地积累和使用,希望不会浪费读者宝贵的时间

通配符小技巧

虽然通配符搜索处理要比其他搜索时间所花时间要长,但是在数据量不大的时候还是建议使用的

这里在讲正则表达式之前还是先给出一些使用通配符要记住的技巧:

1. 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符

2. 除非绝对必要,否则不要把他们用在搜索模式的开始处。这样搜索起来是最慢的

3. 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据

学习使用正则表达式

我们从一个简单的例子开始,下面检索列Name带文本aba的部分行

这里我们先提一个问题,正则表达式和通配符匹配区分大小写吗?仔细观察下面检索的对象,你就知道答案了

b17fe31368a52f1ef2fb1d6ab88f1aae.png

这我们看到关键字REGEXP声明后面的东西作为正则表达式处理,就得到了所有Name列包含aba文本的数据,而且你也发现它们是不区分大小写的

这时候你可能就要问,为什么要那么费力使用正则表达式?在刚才的例子中,没有体现出带来的好处,还可能降低性能,也确实没有以下通配符的方法简单

SELECT *

FROM city

WHERE Name LIKE '%aba%'

ORDER BY Name

LIMIT 10;

接下来,请考虑接下来的这些例子

26e8edc66c3aa768716fef538c3648e4.png

这里使用了正则表达式.East。.是正则表达式中的一个特殊字符,表示匹配任意一个字符

32c0daac1c4dd04c7e7691376a83e9d6.png

|是正则表达式的OR操作,它表示匹配其中之一,多个OR条件可以并入单个正则表达式。

从这里开始终于开始有属于正则表达式自己独有的匹配方式了

1b93b8082601dfbf2e3f5fc65cfc6c29.png

这里大家应该就有些看不懂这有些复杂的正则表达式了,所以接下来介绍所有正则表达式的其他语法

中括号

中括号中添加可以匹配的字符,但是本身只能匹配一个其中一个字符,比如说[123]就是匹配1、2或3

还可以匹配范围,为了简化[123456789]这种过于冗长的集合,可使用-来定义一个范围,比如说[1-9]和刚才的集合是一样的

标识符

^ :有两个作用,一个是在集合中表示否定该集合,一个是作为定位符表示指文本的开始处

[^123] :匹配除了1、2或3这些字符外的其他东西

^a :文本的开头是a字符

$ :和^相反,这是文本结尾的标识符

匹配特殊字符

为了匹配特殊字符,必须用\为前导,这种处理就是所谓的转义,这样也存在了很多空白元字符

\f:换页

\n:换行

\r:回车

\t:制表

\v:纵向制表

多数正则表达式都是用单反斜杠转义,而MySQL要求两个是因为自己解释一个,正则表达库解释另一个

匹配字符类

为了方便工作,可以使用预定义的字符集,成为字符类

[:alnum:]:任意字母或者数字

[:alpha:]:任意字符

[:blank:]:空格和制表

[:cntrl:]:ASCII控制字符

[:digit:]:任意数字

[:graph:]:与[:print:]相同,但是不包括空格

[:lower:]:任意小写字母

[:print:]:任意可打印字符

[:punct:]:不在[:alnum:],但又在[:cntrl:]的任意字符

[:space:]:包括空格在内的任意空白字符

[:upper:]:任意大写字母

[:xdigit:]:任意十六进制数字

匹配多个实例

目前为止所有的正则表达式都试图匹配单次出现,但是有时需要对匹配的数目进行更强的控制

*:0个或多个匹配

+:一个或多个匹配

?:0个或1个匹配

{n}:指定数目的匹配

{n,}:不少于指定数目的匹配

{n,m}:匹配数目的范围

总结

以上基本就是常用到的MySQL正则表达式语法了,如果说你还没有合适的表来做练习,这里还有一个简单的测试方法

SELECT 'hello' REGEXP '[0-9]'

REGEXP检查总是返回0(没有匹配)或者1(匹配),所以显然这个语句的答案是返回0

总结下来你会发现,REGEXP和LIKE的不同在于,LIKE匹配整个串,而REGEXP匹配子串

正则表达式涉及的范围是很广的,本人在自学Linux的Bash编程时也是常常用到它,所以这是你必须掌握的技能

文章如果存在问题或者有其他可以添加的语法,希望大佬斧正和评论,希望我和大家一起进步一起优秀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

everything安装版和便携版有什么区别_A2奶粉内幕:国行版和澳洲版有什么区别 贵的不一定好!...

点击上方蓝字 关注我们申明:此文章来自第三方平台,绝无倾向性诱导。二桐粑粑转载分享。A2是全球首款添加了“A2-β酪蛋白”的奶粉,由新西兰A2公司于2013年推出,这款奶粉在澳洲一上架,就被妈妈们一扫而空。之后A2公司针…

java 什么时候用递归_如果要用Java实现算法,一定慎用递归

现象 :递归是我们很经典的一种算法实现,可以很好的描述一个算法的原理!对于算法的描述、表现和代码结构理解上,递归都是不错的选择!但是本文想说的是java实现一个递归算法的时候尽量不要用递归实现,而是转换…

excel分两个独立窗口_Excel2010 多个独立窗口,解决单窗口无法显示多个文件的问题...

当我们需要编辑多个excel的时候,就会发现一个问题,Excel不能一个窗口下显示多个文档,每次编辑都进行切换就太麻烦了,那如何能解决这个问题呢?接下来跟我一起看看吧!首先在开始菜单输入regedit.exe命令&…

excel冻结窗口_excel怎么冻结窗口?excel冻结窗口怎么设置?

excel冻结行或列的技巧教程:一、冻结第一列1.选择 视图 > 冻结窗格 > 冻结第一列。2.列A和列B之间出现的细线表明第一列已冻结。二、冻结前两列1.选择第三列。2.选择 查看 > 冻结窗格 > 冻结窗格。三、冻结列和行1.选择要在滚动时保持可见的行下方和列右…

web service接口_win7 添加环回网卡+H3C 模拟器 防火墙开启Web功能

1、按下win R键,在其中输入:hdwwiz,然后点击“确定”或者按回车键,打开“添加硬件”对话框。2、看到如下界面时,选择“网络适配器”(如下图所示), 在接着出现的界面中,左方“厂商”一栏里选择“…

java 实现nfa的化简_DFA与NFA的等价性,DFA化简

等价性对于每个NFA M存在一个DFA M’,使得L(M)L(M’)--------等价性证明,NFA的确定化假定NFA M,我们对M的状态转换图进行以下改造:解决初始状态唯一性:引进新的初态结点X和终态结点Y,X,Y∉S,从X…

eclipse查看git地址_gitamp;github的入门实战

一、Git概述(1)定义Git是目前世界上最先进的分布式版本控制系统。(2)能干什么?解决冲突、管理权限、代码备份、协同开发、版本还原、历史追查、版本记录、分支管理、代码审查(3)集中管理型版本管…

使用Apache Kafka作为消息系统的发布-订阅通信中的微服务,并通过集成测试进行了验证...

发布-订阅消息系统在任何企业体系结构中都起着重要作用,因为它可以实现可靠的集成而无需紧密耦合应用程序。 在解耦的系统之间共享数据的能力并不是一个容易解决的问题。 考虑一个企业,其中具有使用不同语言和平台独立构建的多个应用程序。 它需要以响应…

LINUX系统无线网频繁断开_Ubuntu系统安装amp;amp;解决WiFi不可用

写系统安装的文章太多太多了,我为何还要写哪? 因为文章太多太多了,乍一看各种操作猛如虎,实际上可能对你没有一点的帮助。好多文章只是讲解了如何安装ubuntu系统,对于安装后遇到的问题只字不提,笔者决定写一…

return两个返回值_LeetCode 第四题 寻找两个有序数组的中位数

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 [1, 3]nums2 [2]​则中位数是 2.0示例 2:nums1 [1, 2]nums2 [3, 4]​则中…

intellij 使用_使用IntelliJ书签

intellij 使用这是有关IntelliJ的精美书签功能的快速帖子。 IntelliJ使您可以为单行代码添加书签。 将某行添加为书签后,您可以使用多种方法直接跳回该行。 因此,最好在您经常使用的代码位置添加书签。 要创建一个新书签,只需在代码编辑器中…

[即将举行的网络研讨会]对Kubernetes进行故障排除:您需要具备的7个关键组件

如果您没有听说过,那么容器正在吞噬整个世界。 这种转变正在改变我们在开发,交付和维护应用程序方面所知的一切,尤其是在解决错误方面。 有这么多动人的东西,让您难以发现潜伏在基于Kubernetes的应用程序中的关键问题。 传统的故…

php能打开.shp文件吗,shp文件是什么格式的

shape文件由ESRI开发,一个ESRI的shape文件包括一个主文件,一个索引文件,和一个dBASE表。其中主文件的后缀就是【.shp】。本文操作环境:Windows7系统,Dell G3电脑。shape文件由ESRI开发,一个ESRI(Environmen…

成为Java流大师–第5部分:将联接的数据库表转换为流

是否可以将联接的数据库表转换为Java Stream? 答案是肯定的。 既然我们已经多次提出这个问题,我们决定写另一篇动手实验文章,解释如何执行更高级的Stream Joins。 因此,这里是第六篇中的第五篇,后面还有一个GitHub存储…

mysql数据库java链接,java链接MySQL数据库方法

第一步:安装MySQL这步我就很少说了,点击去看看怎么安装吧。html第二步:建立数据库安装好以后,咱们来建立一个数据库,一个表。(代码以下)。//建立数据库 test;//在数据库中建立表 user//插入一条数据create …

matlab虚线分格线,虚线实线网格线……一分钟看懂路面标志线,不再被扣分!

黄色实线黄色实线用来区分不同方向的车道,一般画在马路正中间,车道多的路面上就是双黄线,车道少的路面上则用单黄线。而无论单黄线还是双黄线,均严格禁止车辆跨越,因此压线行驶、超车或者掉头等都是不允许的。黄色虚线…

python 判断列表为空_Python 判断列表为空

原博文 2020-06-05 12:38 − https://mp.weixin.qq.com/s?__bizMzU2MDQwOTU0MA&mid2247483845&idx1&sndaf1d3661b4e6b6a15dbe40c7f9c0e14&chksmfc093f6ecb7eb678c22e3... 相关推荐 2019-09-28 21:13 − Python python是一种跨平台的计算机程序设计语言&#x…

clodeblocks debug断点调试_idea debug调试————简单常用,适合初学者

背景:在现在的开发中,如果不会debug,那么将会给我们的开发带来很大的困扰,如果仅仅是依靠日志信息去查问题,将会大大增加我们解决问题的难度,下面说一下idea开发工具下的简单debug。适用人群:ja…

bigdecimal判断等于0_vue2.0源码用到的工具函数,12个简易的复用函数,看看有多简单...

戎马:https://segmentfault.com/a/11900000196796381. 创建一个被冻结的空对象export const emptyObject Object.freeze({ }) 一旦创建不能给这个对象添加任何属性。2. 判断是否是 undefined 或 nullfunction isUndef (v) { return v undefined || v null}在源码…

告诉我们您想要什么,我们将做到:消费者驱动的合同测试消息传递

相当早以前,我们从REST(ful) Web API的角度讨论了消费者驱动的合同测试 ,尤其是将其投射到Java( JAX-RS 2.0规范)的角度。 可以公平地说,至少在公共API方面, REST仍在Web API领域占据…