zoukankan      html  css  js  c++  java
  • MySql 正则表达式简介及使用

    MySql正则表达式简介及使用

    by:授客 QQ1033553122

    简介

    正则表达式描述了一组字符串,该字符放置于REGEXP工具后面。作用是将一个正则表达式与一个文本串进行比较。

    最简单的正则表达式是不含任何特殊字符的正则表达式。

    例如,正则表达式hello匹配hello

    非普通的正则表达式采用了特殊的特定结构,从而使得它们能够与1个以上的字符串匹配。

    例如,正则表达式hello|word匹配字符串hello或字符串word

     

    实例

    #正则表达式^,查找以指定字符串开头的语句

    #eg:找出以start字符串开头的语句

    select 'start' regexp '^start'; #结果 1 表示匹配到

    SELECT 'start srart' REGEXP '^srart$'; #结果0 表示没匹配到

     

    #正则表达式$,查找以指定字符串结尾的语句

    #eg:找出以end字符串结尾的语句

    select 'wordsend' regexp 'end$'; #结果 1 表示匹配到

    select 'wordsend ' regexp 'end$'; #结果 0 表示没匹配到

     

    #正则表达式*

    注意:单独一个*是非法的,要看*前面的符号,如果是 . 就可以匹配任意字符(包括回车和新行)

    #eg:匹配任意字符,以新行( )或回车( )结尾

    select 'anbny ' regexp '^a.*$'; #结果 1 表示匹配到

    select 'anfyn ' regexp '^a.*$'; #结果 1 表示匹配到

     

    #正则表达式x*x为任意字符,查找包含0或多个x字符的语句

    #eg:查找包含0或多个a字符的语句

    select 'andkdkd' regexp 'a*'; #结果 1 表示匹配到

    select 'aaaaaaadkdkd' regexp 'a*'; #结果 1 表示匹配到

    select 'nmnnkdkd' regexp 'a*'; #结果 1 表示匹配到

     

    #正则表达式x+x为任意字符,查找包含至少一个x字符的语句

    #eg:查找包含至少一个a字符的语句

    select 'akkdkdkd' regexp 'a+'; #结果 1 表示匹配到

    select 'aaaaakdkdkdk' regexp 'a+'; #结果 1 表示匹配到

    select 'kdkdkdld' regexp 'a+'; #结果 0 表示没匹配到

     

    #正则表达式x?,x为任意字符,查找包含一个或0X字符的语句

    select 'akdkdkdk' regexp 'a?'; #结果 1 表示匹配到

    select 'kdkdkdkdk' regexp 'a?'; #结果 1 表示匹配到0

    select 'kaakkk' regexp '^ka?k'; #结果 0 应该匹配kakkk

     

    #正则表达式 字符串1|字符串2,查找包含字符串1或字符串2的语句,注意|前后不要有空格

    select 'xxa' regexp 'xxa|pkdkd'; #结果 1 表示匹配到

    select 'pkdkd' regexp 'xxa|pkdkd'; #结果 1 表示匹配到

    select 'xxapkdkd' regexp 'xxa|pkdkd'; #结果 1 表示匹配到

    select 'xxdkd' regexp 'xxa|pkdkd';  #结果 0 表示无匹配到

     

    #正则表达式 (abc)*,查找包含任意多个abc语句(包括空串)

    #eg

    select 'axkd' regexp '(xk)*'; #结果1 表示匹配到

    select 'akd' regexp '(xd)*'; #结果1 匹配到0

    select 'xdxd' regexp '(xd)*'; #结果是1

     

    #正则表达式 {n}{m,n}mn均为整数

    #a*可以写成 a{0,} a+可以写成a{1,} a?可被写入为a{0,1}

    #更准确地讲,a{n}an个实例准确匹配。a{n,}匹配an个或更多实例。a{m,n}匹配amn个实例,包含mn

    #mn必须位于0RE_DUP_MAX(默认为255)的范围内,包含0RE_DUP_MAX。如果同时给定了mnm必须小于或等于n

    #eg:

    SELECT 'abcde' REGEXP 'a[bcd]{2}e'; #结果为0 abe ace ade 不能满足

    SELECT 'abcde' REGEXP 'a[bcd]{1}e'; #结果为0 同上

    SELECT 'abcde' REGEXP 'abcd{1}e'; #结果为1 abcd 匹配到一个

    SELECT 'abcde' regexp 'ab{1,}'; #结果为1 ab 匹配到一个

    SELECT 'abcde' regexp 'ab{2,}'; #结果为0 ab 只匹配到一个,不能满足2

    SELECT 'abcde' regexp 'a[bcd]{1,10}e'; #结果为1  ?好晕,不清楚啥情况

    SELECT 'abcde' regexp 'a[bcd]{3,10}e'; #结果为1  ?好晕,不清楚啥情况

    SELECT 'abcde' regexp 'a[bcd]{4,10}e'; #结果为0  ?好晕,不清楚啥情况

     

    #正则表达式[a-dX], [^a-dX]

    #匹配任何是(或不是,如果使用^的话)abcdX的字符。

    #两个其他字符之间的“-”字符构成一个范围,与从第1个字符开始到第2个字符之间的所有字符匹配。

    #例如,[0-9]匹配任何十进制数字。要想包含文字字符“]”,它必须紧跟在开括号“[”之后。要想包含文字字符“-”

    #它必须首先或最后写入。对于[]对内未定义任何特殊含义的任何字符,仅与其本身匹配。

    #eg:

    SELECT 'aXbc' regexp '[a-dXYZ]'; #结果是1

    SELECT 'aXbc' REGEXP '^[a-dXYZ]$'; #结果是0

    SELECT 'aXbc' REGEXP '^[a-dXYZ]+$';#结果是1

     

    SELECT 'aXbc' REGEXP '^[^a-dXYZ]+$'; #结果是0

    SELECT 'gheis' REGEXP '^[^a-dXYZ]+$'; #结果是1

    SELECT 'gheisa' REGEXP '^[^a-dXYZ]+$'; #结果是0

     

    #正则表达式[.characters.]

    #在括号表达式中(使用[.]),匹配用于校对元素的字符序列。字符为单个字符或诸如新行等字符名。在文件regexp/cname.h中,可找到字符名称的完整列表。

    SELECT '~' REGEXP '[[.~.]]'; #结果是1

    SELECT '~' REGEXP '[.~.]'; #结果是1

    SELECT '~' REGEXP '[[.tilde.]]';  #结果是1  ??

    SELECT '~' REGEXP '[[.titlde.]]'; #结果是0

     

    #正则表达式[=character_class=]

    #在括号表达式中(使用[]),[=character_class=]表示等同类。它与具有相同校对值的所有字符匹配,包括它本身,

    #例如,如果o(+)均是等同类的成员,那么[[=o=]][[=(+)=]][o(+)]是同义词。等同类不得用作范围的端点。

     

    #正则表达式 [:character_class:],在括号表达式中(使用[]),[:character_class:]表示与术语类的所有字符匹配的字符类。标准的类名称是

    # alnum  文字数字字符

    # alpha  文字字符

    # blank  空白字符

    # cntrl  控制字符

    # digit  数字字符

    # graph  图形字符

    # lower  小写文字字符

    # print  图形或空格字符

    # punct  标点字符

    # space  空格、制表符、新行、和回车

    # upper  大写文字字符

    # xdigit 十六进制数字字符

    #它们代表在ctype(3)手册页面中定义的字符类。特定地区可能会提供其他类名。字符类不得用作范围的端点。

     

    SELECT 'justalnums' REGEXP '[[:alnum:]]+';    #结果是1

    SELECT '!!' REGEXP '[[:alnum:]]+';            #结果是0

    SELECT 'justalnums' REGEXP '[=alnum=]+';  #结果是1

    SELECT '567' REGEXP '[=alpha=]+';  #结果是0

     

    #正则表达式[[:<:]], [[:>:]] 这些标记表示word边界。它们分别与word的开始和结束匹配。

    #word是一系列字字符,其前面和后面均没有字字符。字字符是alnum类中的字母数字字符或下划线(_)

     

    SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';   #结果是1

    SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';  #结果是0

     

    #要想在正则表达式中使用特殊字符的文字实例,应在其前面加上2个反斜杠“”字符。

    #MySQL解析程序负责解释其中一个,正则表达式库负责解释另一个。

    #例如,要想与包含特殊字符“+”的字符串“1+2”匹配,在下面的正则表达式中,只有最后一个是正确的:

     

    SELECT '1+2' REGEXP '1+2';      #结果是0

     

    SELECT '1+2' REGEXP '1+2';     #结果是0

     

    SELECT '1+2' REGEXP '1\+2';    #结果是1

  • 相关阅读:
    WCF 第十三章 可编程站点 为站点创建操作
    WCF 第十三章 可编程站点 所有都与URI相关
    WCF 第十二章 对等网 使用自定义绑定实现消息定向
    WCF 第十三章 可编程站点 使用WebOperationContext
    Using App.Config for user defined runtime parameters
    WCF 第十三章 可编程站点
    WCF 第十三章 可编程站点 使用AJAX和JSON进行网页编程
    WCF 第十二章 总结
    WCF 第十三章 可编程站点 使用WebGet和WebInvoke
    WCF 第十三章 可编程站点 URI和UriTemplates
  • 原文地址:https://www.cnblogs.com/shouke/p/10158016.html
Copyright © 2011-2022 走看看