正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较,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. FastDFS架构

    1.什么是 FastDFS FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用Fas ...

  2. POJ 1942

    开始时竟然用了分情况讨论. 仔细思考一下,哈哈,发现不过是多重集合的组合数而已. #include <iostream> #include <cstdio> #include ...

  3. Android蓝牙串口程序开发

    本文主要介绍了针对android的蓝牙串口上位机开发. 程序下载地址:点击打开链接 一.帧定义 androidclient依照一定的数据帧格式通过蓝牙串口发送数据到连接到MCU的蓝牙从机.MCU接收到 ...

  4. Markdown简单介绍和基本的语法

    原文发表自我的个人站点 http://www.hainter.com/markdown.欢迎大家訪问,谢谢支持~ Markdown是一种语言,能够用于编写高质量的文章,语法简单易用 Markdown的 ...

  5. 根据数据库表结构生成java类

    import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWrit ...

  6. node之版本号升级和管理

    如今非常多人预计和我一样项目中已经開始应用起nodeJS,而伴随着项目的需求,对nodejs版本号也有着各种需求.好了直接进入主题,如今node版本号管理网上有非常多方式.这里说两种: 第一种modu ...

  7. chrome的F12的inspect使用

    chrome中查看cookie https://stackoverflow.com/questions/10014996/how-do-you-check-cookies-using-chrome T ...

  8. JS冒泡事件 与 事件捕获

    JS冒泡事件 与 事件捕获 案例 <!DOCTYPE html> <html> <head> <title>冒泡事件</title> < ...

  9. SVN Commit报错 svn: E155037: Previous operation has not finished; run 'cleanup' if it was interrupted

    svn commit 文件出错 svn: E155037: Commit failed (details follow): svn: E155037: Previous operation has n ...

  10. 乌班图 之 apt命令 及 VMware共享文件夹

    apt是Advanced Packaging Tool ,是Ubuntu下的一个安装包管理工具 大部分软件的安装.更新.卸载 都是利用apt命令来实现 直接在终端输入apt即可查阅命令的帮助信息 常用 ...