正则表达式介绍

前两章中的过滤例子允许用匹配、比较和通配操作符寻找数据。对

于基本的过滤(或者甚至是某些不那么基本的过滤),这样就足够了。但

随着过滤条件的复杂性的增加, WHERE 子句本身的复杂性也有必要增加。

这也就是正则表达式变得有用的地方。正则表达式是用来匹配文本

的特殊的串(字符集合)。如果你想从一个文本文件中提取电话号码,可

以使用正则表达式。如果你需要查找名字中间有数字的所有文件,可以

使用一个正则表达式。如果你想在一个文本块中找到所有重复的单词,

可以使用一个正则表达式。如果你想替换一个页面中的所有URL为这些

URL的实际HTML链接,也可以使用一个正则表达式(对于最后这个例子,

或者是两个正则表达式)。

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

达式。有见识的程序员和网络管理员已经关注作为他们技术工具重要内

容的正则表达式很长时间了。

正则表达式用正则表达式语言来建立,正则表达式语言是用来完成

刚讨论的所有工作以及更多工作的一种特殊语言。与任意语言一样,正

则表达式具有你必须学习的特殊的语法和指令

使用MySQL正则表达式

那么,正则表达式与MySQL有何关系?已经说过,正则表达式的作

用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。MySQL

用 WHERE 子句对正则表达式提供了初步的支持,允许你指定正则表达式,

过滤 SELECT 检索出的数据

仅为正则表达式语言的一个子集 如果你熟悉正则表达式,需

要注意:MySQL仅支持多数正则表达式实现的一个很小的子

集。本章介绍MySQL支持的大多数内容。

基本字符匹配

我们从一个非常简单的例子开始。下面的语句检索列 prod_name 包含

文本 1000 的所有行

除关键字 LIKE 被 REGEXP 替代外,这条语句看上去非常像使用

LIKE 的语句(第8章)。它告诉MySQL: REGEXP 后所跟的东西作

为正则表达式(与文字正文 1000 匹配的一个正则表达式)处理

为什么要费力地使用正则表达式?在刚才的例子中,正则表达式确

实没有带来太多好处(可能还会降低性能),不过,请考虑下面的例子

这里使用了正则表达式 .000 。 . 是正则表达式语言中一个特殊

的字符。它表示匹配任意一个字符,因此, 1000 和 2000 都匹配

且返回。

当然,这个特殊的例子也可以用 LIKE 和通配符来完成

LIKE 匹配整个列。如果被匹配的文本在列值

中出现, LIKE 将不会找到它,相应的行也不被返回(除非使用

通配符)。而 REGEXP 在列值内进行匹配,如果被匹配的文本在

列值中出现, REGEXP 将会找到它,相应的行将被返回。这是一

个非常重要的差别。的作用)?答案是肯定的,使用 ^ 和 $ 定位符(anchor)即可,

本章后面介绍。

匹配不区分大小写 MySQL中的正则表达式匹配(自版本

3.23.4后)不区分大小写(即,大写和小写都匹配)。为区分大

小写,可使用 BINARY 关键字,如 WHERE prod_name REGEXP

BINARY 'JetPack .000'

匹配几个字符之一

匹配任何单一字符。但是,如果你只想匹配特定的字符,怎么办?

可通过指定一组用 [ 和 ] 括起来的字符来完成,如下所示:

这里,使用了正则表达式 [123] Ton 。 [123] 定义一组字符,它

的意思是匹配 1 或 2 或 3 ,因此, 1 ton 和 2 ton 都匹配且返回(没

有 3 ton )。

正如所见, [] 是另一种形式的 OR 语句。事实上,正则表达式 [123]Ton

为 [1|2|3]Ton 的缩写,也可以使用后者。但是,需要用 [] 来定义 OR 语句

查找什么。为更好地理解这一点,请看下面的例子:

这并不是期望的输出。两个要求的行被检索出来,但还检索出

了另外3行。之所以这样是由于MySQL假定你的意思是 '1' 或

'2' 或 '3 ton' 。除非把字符 | 括在一个集合中,否则它将应用于整个串。

字符集合也可以被否定,即,它们将匹配除指定字符外的任何东西。

为否定一个字符集,在集合的开始处放置一个 ^ 即可。因此,尽管 [123]

匹配字符 1 、 2 或 3 ,但 [^123] 却匹配除这些字符外的任何东西

匹配范围

集合可用来定义要匹配的一个或多个字符。例如,下面的集合将匹

配数字0到9:

这里使用正则表达式 [1-5] Ton 。 [1-5] 定义了一个范围,这个

表达式意思是匹配 1 到 5 ,因此返回3个匹配行。由于 5 ton 匹配,

所以返回 .5 ton 。

匹配特殊字符

正则表达式语言由具有特定含义的特殊字符构成。我们已经看到 . 、 [] 、

| 和 - 等,还有其他一些字符。请问,如果你需要匹配这些字符,应该怎么

办呢?例如,如果要找出包含 . 字符的值,怎样搜索?请看下面的例子

这并不是期望的输出, . 匹配任意字符,因此每个行都被检索出

来。为了匹配特殊字符,必须用 为前导。 - 表示查找 - , . 表示查找 .

这种处理

就是所谓的转义(escaping),正则表达式内具有特殊意义的所

有字符都必须以这种方式转义。这包括 . 、 | 、 [] 以及迄今为止使用过的

其他特殊字符。

也用来引用元字符(具有特殊含义的字符),如表9-1所列。

匹配  为了匹配反斜杠(  )字符本身,需要使用  。

或 ? 多数正则表达式实现使用单个反斜杠转义特殊字符,

以便能使用这些字符本身。但MySQL要求两个反斜杠(MySQL

自己解释一个,正则表达式库解释另一个)。

匹配字符类

存在找出你自己经常使用的数字、所有字母字符或所有数字字母字

符等的匹配。为更方便工作,可以使用预定义的字符集,称为字符类

(character class)。表9-2列出字符类以及它们的含义

匹配多个实例

目前为止使用的所有正则表达式都试图匹配单次出现。如果存在一

个匹配,该行被检索出来,如果不存在,检索不出任何行。但有时需要

对匹配的数目进行更强的控制。例如,你可能需要寻找所有的数,不管

数中包含多少数字,或者你可能想寻找一个单词并且还能够适应一个尾

随的 s (如果存在),等等

这可以用表9-3列出的正则表达式重复元字符来完成

定位符

目前为止的所有例子都是匹配一个串中任意位置的文本。为了匹配特定位置的文本,需要使用表9-4列出的定位符

例如,如果你想找出以一个数(包括以小数点开始的数)开始的所

有产品,怎么办?简单搜索 [0-9.] (或 [[:digit:].] )不行,因为

它将在文本内任意位置查找匹配。解决办法是使用 ^ 定位符,如下所示

^ 匹配串的开始。因此, ^[0-9.] 只在 . 或任意数字为串中第

一个字符时才匹配它们。

^ 的双重用途 ^ 有两种用法。在集合中(用 [ 和 ] 定义),用它

来否定该集合,否则,用来指串的开始处

使 REGEXP 起类似 LIKE 的作用 本章前面说过, LIKE 和 REGEXP

的不同在于, LIKE 匹配整个串而 REGEXP 匹配子串。利用定位

符,通过用 ^ 开始每个表达式,用 $ 结束每个表达式,可以使

REGEXP 的作用与 LIKE 一样

本章介绍了正则表达式的基础知识,学习了如何在MySQL的 SELECT

语句中通过 REGEXP 关键字使用它们

内容来源于网络如有侵权请私信删除

mysql 搜索正则表达式_mysql必知必会--用正则表达式 进行搜索相关推荐

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

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

  2. mysql必知必会_MySQL必知必会

    MySQL必知必会 联结的使用, 子查询, 正则表达式和基于全文本的搜索, 存储过程, 游标, 触发器, 表约束. 了解SQL 数据库基础 电子邮件地址薄里查找名字时, 因特网搜索站点上进行搜索, 验 ...

  3. mysql必学十大必会_MYSQL 学习(一)--启蒙篇《MYSQL必知必会》

    MYSQL必知必会 一. DDL 数据定义语言 Data Definition Language 是指CREATE,ALTER和DROP语句. DDL允许添加/修改/删除包含数据的逻辑结构,或允许用户 ...

  4. mysql正则表达式关键字_《MySQL必知必会》正则表达式

    <MySQL必知必会>正则表达式 正则表达式 1.1.关键字 REGEXP 正则表达式的使用需要用到关键字 REGEXP . select prod_name from products ...

  5. mysql数据库过滤空值_mysql必知必会--过 滤 数 据

    使用 WHERE 子句 数据库表一般包含大量的数据,很少需要检索表中所有行.通常只 会根据特定操作或报告的需要提取表数据的子集.只检索所需数据需要 指定搜索条件(search criteria),搜索 ...

  6. mysql常用的通配符_mysql必知必会--用通配符进行过滤

    LIKE 操作符 前面介绍的所有操作符都是针对已知值进行过滤的.不管是匹配一 个还是多个值,测试大于还是小于已知值,或者检查某个范围的值,共 同点是过滤中使用的值都是已知的.但是,这种过滤方法并不是任 ...

  7. mysql第四章分页显示查询出租房屋信息_MYSQL必知必会读书笔记第四章之检索数据...

    MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. 使用Select语句返回的数据,可能会发现显 ...

  8. mysql必_MySQL必知必会(一)

    摘自<MySQL必知必会> 1.1.1 什么是数据库 数据库:保存有组织的数据的容器(通常是一个文件或一组文件) 人们通常用数据库这个术语来代表他们使用的数据库软件.这是不正确的,它是引起 ...

  9. mysql中用完即删用什么_MySQL使用和操作总结(《MySQL必知必会》读书笔记)

    简介 MySQL是一种DBMS,即它是一种数据库软件.DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类是基于客户机--服务器的DBMS.前者用于桌面用途,通常不用于高端或更关键应用. My ...

  10. mysql必知必会的数据_MySQL必知必会--汇 总 数 据

    聚集函数 我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提 供了专门的函数.使用这些函数,MySQL查询可用于检索数据,以便分 析和报表生成.这种类型的检索例子有以下几种. 确定表中行数 ...

最新文章

  1. php命名空间 动态 new,PHP命名空间(namespace)的动态访问及使用技巧_php实例
  2. 【WebPack】WebPack的安装、使用WebPack打包 js/css/img 等文件
  3. .net ListT
  4. C#LeetCode刷题之#415-字符串相加(Add Strings)
  5. 遭遇 XSS 跨站脚本攻击?稳住,这些方法可保你渡劫 | 附代码、图解
  6. .NET Framework 3.5 SP1的图表控件——Chart (转)
  7. (DT系列四)驱动加载中, 如何取得device tree中的属性
  8. 概率论与数理统计图解.tex
  9. mysql查询表字段默认值
  10. POJ 1220 高精度进制转换
  11. 关于struts2 获取页面表单信息的个人做法
  12. C# Graphics 透明 gif 进度条
  13. Android XPopup弹窗
  14. 使用正片和负片为何会得到效果相同的PCB?
  15. 使用OpenSSL库接口,实现AES CBC加密,基于X509 base64编码证书的RSA非对称加密例子
  16. 求超大文件上传方案( c# )
  17. 速率法和终点法的区别_两点法、终点法、速率法
  18. 643. Maximum Average Subarray I*
  19. 如何让3ds Max 2016导入smd文件
  20. 解压缩文件并将其中的excel文件汇总

热门文章

  1. Linux修改文件/文件夹权限
  2. greenplum mysql jdbc_Kylin设置JDBC配置greenplum数据源
  3. rust怎么调整夜晚亮度_买手机时LCD屏和OLED屏怎么选?终于明白了!
  4. win10安装Unbuntu的Linux系统的虚拟机
  5. python简单实践作业_【Python】:简单爬虫作业
  6. java核心技术 pdf下载_JAVA程序员面试秘笈 PDF 下载_Java知识分享网
  7. mybatis 原理_Mybatis大揭秘:plugin插件设计原理
  8. Unity的NewInputSystem的InputManager实现多玩家的总结
  9. OpenShift 4 - DevSecOps - 视频
  10. 在PowerShell中批量卸载设备