正则表达式介绍

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

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

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

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

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

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

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

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

通配符小技巧

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

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

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

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

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

学习使用正则表达式

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

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

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

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

SELECT *

FROM city

WHERE Name LIKE '%aba%'

ORDER BY Name

LIMIT 10;

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

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

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

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

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

中括号

中括号中添加可以匹配的字符,但是本身只能匹配一个其中一个字符,比如说[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编程时也是常常用到它,所以这是你必须掌握的技能

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

mysql bc_正则表达式——MySQL搜索过滤相关推荐

  1. mysql 搜索正则表达式_[MySQL] 用正则表达式进行搜索

    正则表达式的作用就是匹配文本,讲一个模式(正则表达式)与一个文本串进行比较. 基本字符匹配 SELECT 列名 FROM 表名 WHERE 列名 REGEXP 条件 ORDER BY 列名; 形式与L ...

  2. mysql 正则去小数位_mysql必知必会--用正则表达式 进行搜索

    正则表达式介绍 前两章中的过滤例子允许用匹配.比较和通配操作符寻找数据.对 于基本的过滤(或者甚至是某些不那么基本的过滤),这样就足够了.但 随着过滤条件的复杂性的增加, WHERE 子句本身的复杂性 ...

  3. mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法

    Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...

  4. MySQL的正则表达式

    1. Mysql的正则表达式仅仅使SQL语言的一个子集,可以匹配基本的字符.字符串. 例如:select * from wp_posts where post_name REGEXP 'hello', ...

  5. MySQL使用正则表达式

    MySQL是一个流行的开放源代码数据库软件.MySQL率先提供了正则表达式支持作为一种数据库搜索手段. MySQL对正则表达式的支持体现在允许在where子句里面使用如下格式的表达式: REGEXP ...

  6. 如何使用MySQL的全文本搜索功能

    全本文搜索 1.全文本搜索 1.1理解全文本搜索 2.使用全文搜索 2.1启用全文本搜索支持 2.2进行全文本搜索 2.3使用查询扩展 2.4布尔文本搜索 2.5全文搜索的使用说明 1.全文本搜索 1 ...

  7. 快速回顾 MySQL:全文本搜索

    前提要述:参考书籍<MySQL必知必会> 文章目录 14.1 全文本搜索 14.1.1 启动全文本搜索 14.1.2 使用全文本搜索 14.1.3 使用查询扩展 14.1.4 使用布尔查询 ...

  8. 1.Mysql 的正则表达式

    2018-11-26 MySQL 学习笔记 周谦 MySQL 学习笔记 MySQL 的安装 2.1 MySQL 安装与配置 2.1.1 MYSQL 的安装 1.打开下载的 mysql 安装文件 mys ...

  9. mysql数据库搜索字符_在MySQL数据库中快速搜索字符串?

    使用FULLTEXT搜索来快速搜索字符串.让我们首先创建一个表-mysql> create table DemoTable1554 -> ( -> Title text ->  ...

最新文章

  1. matlab调用c++生成dll32位与64位对应关系
  2. zcmu-1644 多连块拼图
  3. Android adb.exe程序启动不起来,如何处理
  4. ubuntu学习摘要-ubuntu root用户
  5. python3 三级菜单-基础版
  6. 二叉树遍历算法之三:后序遍历
  7. xmm1是什么器件_第三章基于Multisim10在模拟电路实验中的应用
  8. 计算机内存不够在哪里清扫,电脑内存不足怎么清理
  9. 【2020年领域新星】 Ruibo Liu 达特茅斯学院
  10. 解决: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上,运行“ slui.exe 0x2a 0x803f7001 “以显示错误文本,激活win10步骤流程。
  11. 中华流传十大吉祥图解
  12. 计网实验七:应用层协议服务配置(DNS,HTTP,FTP)
  13. Android打开蓝牙的两种方式
  14. java百万级别的并发_抗住百万高并发的 6 个关键技术!
  15. htonl,htons,ntohl,ntohs的详解
  16. 【开源工程】STM32C8T6+ADC信号采集+OLED波形显示
  17. 代理软件cntlm之下载、安装、配置及使用
  18. iOS 开发问与答(142-159)
  19. 重庆大学计算机学院刘然,重庆大学考研研究生导师简介-刘然
  20. 光学相控阵技术能否用于生物雷达

热门文章

  1. junit测试方法_JUnit测试方法订购
  2. 内核堆栈 用户堆栈_堆栈痕迹从何而来?
  3. EAI的Spring集成教程
  4. 如何以及何时使用例外
  5. jvm锁_JVM如何处理锁
  6. ejb 2.0 3.0_EJB 3.0注入和查找简介
  7. RHQ指标的WildFly子系统
  8. Hibernate 4.3 ORM工具
  9. Java应该是更高级别还是更低级别?
  10. Google Guava BiMaps