zoukankan      html  css  js  c++  java
  • mysql 正则篇

    一、SQL模式

        SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在 MySQL中,SQL的模式缺省是忽略大小写的。下面显示一些例子。注意在你使用SQL模式时,你不能使用=或!=;而使用LIKE或NOT LIKE比较操作符。

        SELECT 字段 FROM 表 WHERE 某字段 Like 条件

    其中关于条件,SQL提供了四种匹配模式:

    1,%:表示任意个或多个字符。可匹配任意类型和长度的字符。

        比如 SELECT * FROM [user] WHERE u_name LIKE ‘%三%’

        将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。

        另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件

        SELECT * FROM [user] WHERE u_name LIKE ‘%三%’ AND u_name LIKE ‘%猫%’

        若使用 SELECT * FROM [user] WHERE u_name LIKE ‘%三%猫%’

        虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

    2,_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)

        比如 SELECT * FROM [user] WHERE u_name LIKE ‘_三_’

        只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;

        再比如 SELECT * FROM [user] WHERE u_name LIKE ‘三__’;

        只找出“三脚猫”这样name为三个字且第一个字是“三”的;

    二、正则模式

        由MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。

        扩展正则表达式的一些字符是:

        “.”匹配任何单个的字符。(单字节字符)

        一个字符类“[…]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的一个范围,使用一个“-”。“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。

        “ * ”匹配零个或多个在它前面的东西。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的任何数量的数字,而“.*”匹配任何数量的任何东西。

        正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹配小写或大写的“a”而“[a-zA-Z]”匹配两种写法的任何字母。

        如果它出现在被测试值的任何地方,模式就匹配(只要他们匹配整个值,SQL模式匹配)。

        为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。

        为了说明扩展正则表达式如何工作,上面所示的LIKE查询在下面使用REGEXP重写:

        为了找出以“三”开头的名字,使用“^”匹配名字的开始。

        FROM [user] WHERE u_name REGEXP ‘^三’;

        将会把u_name为 “三脚猫”等等以“三”开头的记录全找出来。

        为了找出以“三”结尾的名字,使用“$”匹配名字的结尾。

        FROM [user] WHERE u_name REGEXP ‘三$’;

        将会把u_name为“张三”,“张猫三”等等以“三”结尾的记录全找出来。

        你也可以使用“{n}”“重复n次”操作符重写先前的查询:

        FROM [user] WHERE u_name REGEXP ‘b{2}$’;

        注意:如果是中文字符,可能在使用时需要注意一下。

    .  表示匹配任意一个字符。

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

    [ ] 匹配任何单一字符。

    [123]定义一组字符,意思是匹配1或2或3.

    [ ]是另外一种形式的OR语句,[123] Ton  就是  [1 | 2 | 3] Ton 的缩写。

    ^ 否定一个字符集合,将匹配除指定字符外的任何东西。[^123]将匹配除这些字符外的任何东西。

    匹配范围

    [0123456789] 或 [0-9] 将匹配数字0到9

    [a-z] 匹配任意字母符号

    匹配特殊字符

    \  为前导。即转义.正则表达式内具有特殊意义的所有字符都必须以这种方式转义。

    \-  表示查找 -

    \.  表示查找 .

    \  也用来引用元字符(具有特殊意义的字符)

    \f 换页
    \n 换行
    \r 回车
    \t 制表
    \v 纵向制
     

    匹配字符类

    [:a;num:] 任意字母和数字(同 [a-zA-Z0-9])
    [:alpha:] 任意字符(同 [a-zA-Z])
    [:blank:] 空格和制表(同 [\t])
    [:cntrl:] ASCII控制字符(ASCII 0到31和127)
    [:digit:] 任意数字(同[0-9])
    [:graph:] 与["print:] 相同,但不包括空格
    [:lower:] 任意小写字线(同 [a-z])
    [:print:] 任意可打印字符
    [:punct:] 既不在 [:alnum:] 又不在 [:cntrl:] 中的任意字符
    [space:] 包括空格在内的任意空白字符(同 [\f\n\t\r\v])
    [:upper:] 任意大小字母(同 [A-Z])
    [:xdigit:] 任意十六进制数字(同 [a-fA-F0-9])
     

    匹配多个实例

    元字符 说明
    * 0个或多个匹配
    + 1个或多个匹配(等于 {1, })
    ? 0个或1个匹配(等于 {0, 1})
    {n} 指定数目的匹配
    {n, } 不少于指定数目的匹配
    {n ,m} 匹配数目的范围(m不超过255)
     
     
    定位符
    ^         文本的开始
    $ 文本的末尾
    [[:<:]] 词的开始
    [[:>:]] 词的结尾


    ^的双重用途:在集合中(用[ ]定义),用它来否定该集合。否则,用来指串的开始和。

    
    

    LIKE 匹配整个串,而REGEXP匹配子串。

    
    

        简单的正则表达式测试  可以在不使用数据库的情况下用SELECT来测试正则表达式。

    
    

        REGEXP检查总是返回0(没有匹配)或1(匹配),可以用带文字串的REGEXP来测

    
    

        试表达式,并试验它们。相应的语法如下:

    
    

            SELECT 'hello' REGEXP '[0-9]'

    
    

        这个例子返回0(因为文本hello中没有数字)。

     
  • 相关阅读:
    C#基础笔记(第二十一天)
    C#基础笔记(第十九天)
    C#基础笔记(第十八天)
    C#基础笔记(第十七天)
    C#基础笔记(第十六天)
    C#基础笔记(第十五天)
    [PyTorch 学习笔记] 6.1 weight decay 和 dropout
    PyTorch ResNet 使用与源码解析
    [PyTorch 学习笔记] 5.2 Hook 函数与 CAM 算法
    [PyTorch 学习笔记] 5.1 TensorBoard 介绍
  • 原文地址:https://www.cnblogs.com/sss-justdDoIt/p/5660532.html
Copyright © 2011-2022 走看看