• 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

  • 相关阅读:
    传统IO总结
    关于JAVA垃圾回收的一些小tips
    一个爬喜马拉雅音频的例子
    return研究
    Java基础知识-java.util.concurrent包下常见类的使用
    <a>链接的四个伪类顺序
    前端面试题
    setTimeout的作用以及setTimeout延时0毫秒的作用
    闭包的使用
    JavaScript typeof obj === ‘object’ 这样写有什么问题
  • 原文地址:https://www.cnblogs.com/shouke/p/10158016.html
Copyright © 2020-2023  润新知