zoukankan      html  css  js  c++  java
  • MySQL ------ 使用正则表达式进行搜索 regexp (八)

    正则表达式: 用来匹配文本的特殊的字符集合。

    注意:

      1、正则表达式比较复杂,前面灵活使用基本够用

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

      3、正则表达式使用正则表达式语言建立的,所以想要使用的顺滑,就要学会他的特殊语法和指令

    简单使用,正则表达式语言的一个子集,MySQL 正则表达式

    1、用一下

    -- 检索商品名中含有 ton 的商品
     select prod_id,prod_name,prod_price from products where prod_name REGEXP 'ton' order by prod_price;

     注意:  like 与regexp  的区别:就是 like 匹配整个列值,要的是整体。regexp 匹配这个列值中的有没含有,属于他的一部分就行

      1、like 匹配整个列,如果匹配的文本正在列值中出现,like 将不会找到他,相应的行也不会被返回(除非与通配符连用)

      2、regexp 在列值内进行匹配,如果被匹配的文本在列值中出现,regexp 就会找到他,将相应的行返回。

    2、区分大小写匹配

    MySQL 默认是不区分大小写的,要区分的话可以使用 binary  关键字区分大小写

    -- 查看商品名中含有T的商品
    select prod_id,prod_name,prod_price from products where prod_name regexp binary 'T' order by prod_price;

     3、进行或 (|)匹配,像之前的OR 一样,满足其中之一就行

    -- 检索商品名中含有ton 或1000 的商品
     select prod_id,prod_name,prod_price from products where prod_name regexp 'ton|1000' order by prod_price;

     注意: | 为正则表达式的或操作符,表示满足其中之一就会匹配返回,使用方式与or 基本一致,两个后多个条件多个|

    4、匹配特定字符

    -- 查找商品名中含有的  五个字符中,第一个字符是12的商品

    select prod_id,prod_name,prod_price from products where prod_name regexp '[12] ton' order by prod_price;

    因此,[ ]  是 or 语句的另一种形式,[12] 相当于[1|2] , 但是要用中括号包裹起来,表示 1或2 开头的某某

    与 1|2 ton 还是有区别的

    -- 查找商品名称含有 1 或 2 ton 的商品
     select prod_id,prod_name,prod_price from products where prod_name regexp '1|2 ton' order by prod_price;

     可以查找指定之外的 [^12]

    5、匹配范围

    集合用来定义要匹配的一个或多个字符,如 [0123456789] 可以简化为 [0-9] ,其中 -  表示从0到9 的一个范围

    -- 查找商品名中含有的  五个字符中,第一个字符是0到9之间 的商品
    select prod_id,prod_name,prod_price from products where prod_name regexp '[0-9] ton' order by prod_price;

    6、匹配特殊字符

    之前已经了解的三个特殊符号

      表示匹配所有的(.)

      表示或的(|)

      表示范围的(-)

    那么要查询商品名中含有那些与特殊钢符号冲突的怎么办,

      使用  \. 进行转义(escaping)

    -- 查找商品名中含有 . 的商品
    select prod_id,prod_name,prod_price from products where prod_name regexp '\.' order by prod_price;

     两个反斜杠也可以用来引用元字符(具有特殊含义的字符)

     注意:

      1、要匹配反斜杠() 需要使用 \

      2、多数正则表达是需要使用单个反斜杠,才能使用字符本身,但是Mysql 要求两个(Mysql 解释一个,正则表达式库解释一个)

     

    7、字符类

    字符类(character class): 使用预定义的字符集,找出常用的数字,所有字母字符或数字字符

    -- 检索商品名中含有 任意数字的商品
    select prod_id,prod_name,prod_price from products where prod_name regexp '[[:digit:]]' order by prod_price;

    8、匹配多个实例

    检索多个实例,

    --  匹配商品名中含有 ([0-9] sticks) 或 ([0-9] stick) 的商品,
    --  其中第二的字符为任意数字,其中?前面的哪个s 可能有可能没有
     select prod_id,prod_name,prod_price from products where prod_name regexp '\([0-9] sticks?\)' order by prod_price;

     重复元字符

     字符类和重复元字符连用

    -- 检索商品名中有四个数字连在一起的商品
    select prod_id,prod_name,prod_price from products where prod_name regexp '[[:digit:]]{4}' order by prod_price;

    9、定位符  

    匹配特定位置的文本

    -- 检索商品名中以任意一个数(包括小数点)开始的产品
    select prod_id,prod_name,prod_price from products where prod_name regexp '^[0-9\.]' order by prod_price;

    注意:

      1、^ 有两个作用,一是在集合中用来否定集合,二是指字符串的开始处

      2、利用定位符,以^ 开始和以$ 结束的每个表达式,可以匹配整个字符串,起到和 like 一样的作用

    简单的正则表达式测试:

    在不使用数据库表的情况下用select 来测试正则表达式,regexp 检查总是返回0(没有匹配)或1(匹配)

  • 相关阅读:
    MYSQL ALTER
    初入园子
    java常用基础(一)
    C语言类型转换
    C++用EGE简单实现别踩白块游戏
    CPP常用库函数以及STL
    至我的新博客
    工厂模式
    pl/sql developer 编码格式设置
    单例模式
  • 原文地址:https://www.cnblogs.com/obge/p/12942905.html
Copyright © 2011-2022 走看看