正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较,mysql允许你指定正则表达式,过滤select检索出的数据。但是mysql仅仅支持正则表达式的一个子集。

  1、基本字符匹配:

    select prod_name from products where prod_name regexp '1000' order by prod_name;

    以上语句检索到prod_name包含文本1000的所有行。在regexp后面所跟的东西作为正则表达式处理。但是正则的好处还有,如下:

    select prod_name from products where prod_name regexp '.000' order by prod_name;

    这里的.000表示匹配任意一个字符,当然1000和2000都匹配且返回。

    like 和 regexp的区别:like匹配整个列,如果匹配的文本在列值中出现,mysql将不会找到它。而regexp在列值类进行匹配,如果被匹配的文本在列值中出现,regexp将会找到它。但是regexp能否用来匹配整个列值,我们使用和$定位符即可。

  2、进行or匹配

    为搜索两个串(或者为这两个串,或者为另一个串),使用|,如下:

    select prod_name from products where prod_name regexp ‘1000|2000’ order by prod_name;

    类似where匹配中的OR子句。可以将多个or条件并入一个正则表达式。

    

  3、匹配几个字符之一:

    如果你只想匹配特定字符,可通过制定一组用[和]括起来的字符来完成,如下:

    select prod_name from products where prod_name regexp '[12]ton' order by prod_name

    上述语句的意思是匹配1或2,因此1ton和2ton都匹配且返回。其中[12]等效于[1|2]。但是如下:

    select prod_name from products where prod_name regexp '1|2|3ton' order by prod_name;

    以上语句的结果是错误的,因为你让mysql检索的是1或2或3ton,所以他的结果是错误的。所以需要用[]括起来再与其他进行连接起来匹配。

    也可以使用[^12],匹配除这些字符外的任何东西。

   4、匹配范围:集合可用来定义要匹配的一个或多个字符,如下:[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;

     以上主要匹配1-5的数据。

  

   5、匹配特殊字符:如果你需要特殊匹配出现在正则表达式中的这些特殊字符怎么办?如下我们想匹配.这个字符。

    select vend_name from vendors where vend_name regexp '\\.' order by vend_name;

    这里使用了转义,正则中一些具有特殊含义的字符均可以使用其进行转义。包括.、|、[]等,\\也可以用来引用元字符(具有特殊含义的字符),如下:

    \\f                  换页

    \\n         换行

    \\r          回车

    \\t          制表

    \\v         纵向制表

    但是如果我们为了匹配\,我们需要使用\\

  6、匹配字符类:我们还可以使用你自己经常使用的数字、所有字母或所有数字字母字符等的匹配。我们可以使用预定义字符集,成为字符类,如下: 

    select prod_name from products where prod_name regexp '[[:digit:]]{4}' order by prod_name;

    [:alnum:]   任意字母和数字  (a-z A-Z  0-9)

    ['alpha:]     任意字符(a-z A-Z)

    [:blank:]     空格和制表[\\t]

    [:cntrl:]       ASCII控制字符[ascii 0-31和127]

    [:digit:]       任意数字[0-9]

  7、匹配多个实例:我们之前使用的正则表达式都试图匹配单词出现,如果存在一个匹配,该行被检索出来,如果不存在,检索不出任何行。但是,例如,如果我们需要寻找所有的数,不管数中包含多少数字,或者你可能想寻找一个单词并且还能够适应一个未遂的s、

    select prod_name from products where prod_name regexp '\\([0-9] sticks?\\)' order by prod_name;

    以上语句的正则表达的含义是匹配在括号内的0-9之间的sticks,可以有s,也可以没有s,这是根据?的解释

    *      0个或多个匹配

    +        1个或多个匹配

    ?       0个或1个匹配

    {n}                   指定数目的匹配

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

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

  select prod_name form products where prod_name regexp '[[:digit:]]{4}' order by prod_name;

  以上语句匹配的是匹配连在一起的是个数字

  

  8、定位符:之前都是匹配一个串中任意位置的文本,为了匹配特定位置的文本,需要如下的定位符。

  例如,你想找出一个数(包括以小数点开始的数)开始的所有产品,我们只能使用定位符。如下:

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

  以上语句表达的是只在.或者任意数字为串中第一个字符时才匹配。

  ^文本开始

  $文本结尾

  [[:<:]]  词的开始

  [[:>:]]  词的结尾

mysql-用正则表达式进行搜索的更多相关文章

  1. mysql中正则表达式的使用

    mysql中正则表达式的性能要高于like,所以这里总结一下正则表达式的使用. 正则表达式的模式及其含义: 下面举例说明其用法: 建表student: create table student(id ...

  2. MYSQL使用正则表达式过滤数据

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

  3. MySql 使用正则表达式

    MySql 用where 子句对正则表达式提供了支持,允许你指定正则表达式,注意mysql仅支持多数正则表达式实现的一个很小的子集. 1.基本字符匹配: SELECT prod_name FROM p ...

  4. mysql必知必会--用正则表达式 进行搜索

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

  5. MySQL中正则表达式

    正则表达式是用来匹配文本的特殊的串(字符集合),将一个模式(正则表达式)与一个文本串进行比较 从文本文件中提取电话号码 查找名字中间带有数字的文件 文本块中重复出现的单词 替换页面的URL为这些URL ...

  6. MySQL+Sphinx实现全文搜索

    最近在做一个搜索引擎,主要是对图书方面的对象级的搜索,首先来了解下Sphinx吧. 它能够提高你的查询的速度,这个不是一般的快. Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,Pos ...

  7. mac 下 sphinx + mysql + php 实现全文搜索(xampp)(3)sphinx 的配置项解析

    source:数据的来源,数据是从什么地方来的. index:索引,当有数据源之后,从数据源处构建索引.索引实际上就是相当于一个字典检索.有了整本字典内容以后,才会有字典检索. searchd:提供搜 ...

  8. (转载)MySQL LIKE 用法:搜索匹配字段中的指定内容

    (转载)http://www.5idev.com/p-php_mysql_like.shtml MySQL LIKE 语法 LIKE 运算符用于 WHERE 表达式中,以搜索匹配字段中的指定内容,语法 ...

  9. 022_word中如何正确的使用正则表达式进行搜索

    一.word中正则表达式详解 https://www3.ntu.edu.sg/home/ehchua/programming/howto/PowerUser_MSOffice.html 实战举例: ( ...

随机推荐

  1. 《一个民企CEO的职场阳谋》–读书总结(下)

    职场是一个战场,很多人几十年在这里战斗. 职场是一个熔炉,很多人大半生在这里修炼. 如果在办公室里得不到快乐,生活就不会快乐. 如果公司里头感觉不到幸福,人生就不会幸福.(以上四句来自老刘的博客) & ...

  2. ASP.NET-HTML.Helper常用方法

    Html.ActionLink方法 Html.ActionLink("linkText","actionName") Html.ActionLink(" ...

  3. [using_microsoft_infopath_2010]Chapter1 介绍InfoPath2010

    本章提要 1.列举对于就SharePoint2010来说使用InfoPath2010的好处 2.使用Office后台函数创建InfoPath表单 3.使用InfoPath接口 4.创建基于XML的文件 ...

  4. 怎样訪问pcie整个4k的配置空间

    眼下用于訪问PCIe配置空间寄存器的方法须要追溯到原始的PCI规范. 为了发起PCI总线配置周期,Intel实现的PCI规范使用IO空间的CF8h和CFCh来分别作为索引和数据寄存器,这样的方法能够訪 ...

  5. Vuejs2.0学习之二(Render函数,createElement,vm.$slots,函数化组件,模板编译,JSX)

    时隔一周多,因为一些别的事情绊住了,下面接着写.中间这段时间也有看官方文档,发现正如他所说90%的基础内容都一样,所以这里直接跳到我比较关注的东东上,要是想看看哪些不一样,可以参考这个http://v ...

  6. 网线直连Window和Ubuntu

      找根网线直接连接两台电脑. 然后设置对应的网络到相同的网关和Mask下面.  检测能否ping通就可以直连了.   Ubuntu设置网络后可在IP设置界面里设置Route, 选择直连网线仅用于连接 ...

  7. POJ 3657 并查集

    题意: 思路: 1.二分+线段树(但是会TLE 本地测没有任何问题,但是POJ上就是会挂--) 2.二分+并查集 我搞了一下午+一晚上才搞出来----..(多半时间是在查错) 首先 如果我们想知道这头 ...

  8. 修改echarts环形图的牵引线及文字位置

    修改echarts环形图的牵引线及文字位置,下面代码及效果不仅如此,也包含了其它的效果哦.有问题可以留言. 根据echarts官方示例修改效果: 官方示例图: 修改效果图: 直接上代码:其它不多说. ...

  9. Fork and Join: Java Can Excel at Painless Parallel Programming Too!---转

    原文地址:http://www.oracle.com/technetwork/articles/java/fork-join-422606.html Multicore processors are ...

  10. DBMS_XPLAN详细说明

    执行计划的组成部分 正确的看执行计划 DBMS_XPLAN 这个包是一个很好查看执行计划,显示很多格式,来分析执行计划中存在的问题 format:控制详细执行计划输出的格式,包含以下内容: BASIC ...