正则表达式是用来匹配文本的特殊的串(字符集合),将一个模式(正则表达式)与一个文本串进行比较;

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

MySQL仅支持多数正则表达式实现的一个很小的子集;

一、基本字符匹配

select column from table where column regexp ‘1000’ order by column;

该语句检索列column包含文本1000的所有行;它告诉MySQL:regexp后所跟的东西作为正则表达式(与文字正文1000匹配的一个正则表达式)处理。

select column from table where column regexp ‘.000’ order by column;

该语句中的正则表达式(.是正则表达式语言中的一个特殊字符,表示匹配任意一个字符(该语句也可以使用like和通配符完成)

like和regexp的区别:

①like匹配整个列;

select column from table where column like ‘1000’ order by column;

该SQL语句将不返回数据,因为like匹配整个列,如果被匹配的文本在列值中出现,like将不会找到它,相应的行也不会被返回(除非使用通配符)

②regexp在列值内进行匹配

select column from table where column regexp ‘1000’ order by column;

该SQL语句会返回一行数据,如果被匹配的文本在列值中出现,regexp将会找到它,相应的行将被返回(如果希望regexp匹配整个列值,使用^和$定位符{anchor})即可

MySQL中正则表达式匹配不区分大小写,如希望区分大小写,可使用binary关键字,如where column regexp binary ‘test .000’

二、进行or匹配

select column from table where column regexp ‘X|Y’ order by column;

or表示匹配其中之一,功能雷雨与select语句中的or语句,多个or条件可并入单个正则表达式

三、匹配几个字符之一

select column from table where column regexp ‘[XYZ]test’ order by column;

[]是另一种形式的or语句,作用是匹配指定的(其中之一)字符;正则表达式[XY]test为[X|Y|Z]test的缩写,它的意思是匹配X或者Y或者Z

字符集合也可以被否定,即匹配除指定字符外的任何东西,为否定一个字符集,可以在集合开始处设置一个‘^’例如[^XYZ]([]定义更准确,|如果不括起来,则应用于整个串

四、匹配范围

集合可以用来定义要匹配的一个或多个字符

比如[0123456789],为了简化这种类型的集合,可使用(-)来定义一个范围,即[0-9];(范围不仅仅局限于数值,还可以使字母字符等)

五、匹配特殊字符

正则表达式由具有特定含义的特殊字符构成;如果要匹配这些特殊字符,就需要用\\为前导;\\-表示查找-,\\.表示查找.

select column from table where column regexp ‘\\-’ order by column;

这种处理方式就是所谓的转义(escaping),正则表达式内具有特殊意义的所有字符都必须以这种方式转义;(为了匹配反斜杠{\}字符本身,需要使用\\\)

PS:多数正则表达式实现使用单个反斜杠转义特殊字符,以便能够使用这些字符本身,而MySQL要求两个反斜杠(MySQL自己解释一个,正则表达式库解释一个)

\\也用来引用元字符(具有特殊含义的字符),如下:

六、匹配字符类

字符类(character class):有时候需要检索出我们需要的数字、所有字母字符或所有数字字母字符等的匹配,我们可以使用预定义的字符集,称为字符类;如下:

七、匹配多个实例

有时候需要对匹配的数目进行更强的控制,比如:寻找所有的数,不管数中包含多少数字,或寻找一个单词并尾随一个s(如果存在)等情况,我们可以利用正则表达式中的重复元字符来完成;如下

select column from table where column regexp ‘\\([0-9] sticks?\\)’ order by column;

上面的正则表达式‘\\([0-9] test?\\)’意为:\\匹配([0-9]匹配任意数字,这里指匹配的数值范围,sticks?匹配stick和sticks{?使s可选,因为?匹配它前面任何字符的0或者1次出现})

八、定位符

有时候为了匹配特定位置的文本,需要使用定位符,常用定位符列表如下:

例如:找出一个以一个数(包括小数点开始的数)开始的所有数值,简单搜索[0-9\\.]或([[:digit:]\\.])不行,因为它将在文本内任意位置查找匹配,可以使用^定位符,如下

select column from table where column regexp '^[0-9\\.]' order by column;

^匹配串的开始,有两种用法:

在集合中(用[和]定义),用它来否定该集合

用来指串的开始处

使regexp和like起相同作用:like匹配整串二regexp匹配子串,可以利用定位符,用^开始每个表达式,用$结束每个表达式,就可以使regexp和like作用一样

MySQL(三)用正则表达式搜索的更多相关文章

  1. 【转】MYSQL入门学习之二:使用正则表达式搜索

    转载地址:http://www.2cto.com/database/201212/173869.html 一.正则表达式介绍   www.2cto.com   正则表达式是用来匹配文本的特殊的串(字符 ...

  2. MySQL中REGEXP正则表达式使用大全

    REGEXP在mysql是用来执行正则表达式的一个函数 像php中的preg之类的函数了,regexp正则函数如果只是简单的查询使用like即可,但复杂的还是需要使用regexp了,下面我们来看看. ...

  3. MySQL学习之正则表达式篇

    正则表达式(REGEXP) 1.简介 正则表达式是用来匹配列值的特殊字符集合,许多领域都有涉及, MySQL使用的正则表达式仅为其一个小小的子集. 2.基本字符匹配 2.1筛选包含特定字符串的信息 / ...

  4. MySQL(三)

    MYSQL(三) 上一章给大家说的是数据库的视图,存储过程等等操作,这章主要讲索引,以及索引注意事项,如果想看前面的文章,url如下: MYSQL入门全套(第一部) MYSQL入门全套(第二部) 索引 ...

  5. coreseek实战(三):全文搜索在php中应用(使用api接口)

    coreseek实战(三):全文搜索在php中应用(使用api接口) 这一篇文章开始学习在php页面中通过api接口,使用coreseek全文搜索. 第一步:综合一下前两篇文章,coreseek实战( ...

  6. 第11.3节 Python正则表达式搜索支持函数search、match、fullmatch、findall、finditer

    一. 概述 re模块的函数search.match.fullmatch.findall.finditer都是用于搜索文本中是否包含指定模式的串,函数的参数都是一样的,第一个参数是模式串.第二个是搜索文 ...

  7. C# 词法分析器(三)正则表达式

    系列导航 (一)词法分析介绍 (二)输入缓冲和代码定位 (三)正则表达式 (四)构造 NFA (五)转换 DFA (六)构造词法分析器 (七)总结 正则表达式是一种描述词素的重要表示方法.虽然正则表达 ...

  8. Eclipse中使用正则表达式搜索替换

    Eclipse中使用正则表达式搜索替换 分类:software | 标签: 正则表达  替换  eclipse  2011-11-29 11:28 阅读(1930)评论(0)编辑删除 最近在eclip ...

  9. mysql(三) 数据表的基本操作操作

    mysql(三) 数据表的基本操作操作 创建表,曾删改查,主键,外键,基本数据类型. 1. 创建表 create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGIN ...

  10. 65. XPages自定义控件(三)高级搜索之三

    RecordView控件的两个文件的完整代码在本文末尾给出.虽说完整,仅靠这两个文件,RecordView控件还不能正常工作,因为在这两个文件里还引用了其他自定义控件,调用了作为managed bea ...

随机推荐

  1. ES 5 中 判断数组的方法

    源代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  2. jQuery中bind() live() delegate() on() 的区别

    实例 bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数 $("a").bind("click",function(){aler ...

  3. [VUE ERROR] Invalid default value for prop "slides": Props with type Object/Array must use a factory function to return the default value

    错误原因: 当给子组件设置 props 属性时,如果参数类型是 Array 或 Object ,它的默认值必须是由工场函数返回,不能直接赋值 错误代码: proE: { type: Array, de ...

  4. Linux 磁盘分区方案简析

    Linux 磁盘分区方案简析 by:授客 QQ:1033553122   磁盘分区 任何硬盘在使用前都要进行分区.硬盘的分区有两种类型:主分区和扩展分区.一个硬盘上最多只能有4个主分区,其中一个主分区 ...

  5. 修改eclipse的背景色(转载)

    eclipse操作界面默认颜色为白色.对于我们长期使用电脑编程的人来说,白色很刺激我们的眼睛,所以我经常会改变workspace的背景色,使眼睛舒服一些. 设置方法如下: 1.打开window-> ...

  6. Android 裁剪人脸

    人脸裁剪类 public final class FaceCj { private static BitmapFactory.Options BitmapFactoryOptionsbfo; priv ...

  7. jpa 联表查询 返回自定义对象 hql语法 原生sql 语法 1.11.9版本

    -----业务场景中经常涉及到联查,jpa的hql语法提供了内连接的查询方式(不支持复杂hql,比如left join ,right join).  上代码了 1.我们要联查房屋和房屋用户中间表,通过 ...

  8. 【Python】keras使用LSTM拟合曲线

    keras生成的网络结构如下图: 代码如下: from sklearn.preprocessing import MinMaxScaler from keras.models import Seque ...

  9. CSS3创建圆圈进度条

    最近在工作中需要做一个圆圈倒计时,刚开始的想法是做个纯数字的倒计时即可,可是需求觉得这个不太好看,想加个倒计时进度条.于是就有了接下来的分析过程... 我们知道CSS3可以很方便的画圆,圆环,然后在加 ...

  10. Python实现批量梯度下降算法

    # -*- coding: UTF-8 -*- import numpy as npimport math # 定义基础变量learning_rate = 0.1n_iterations = 1000 ...