zoukankan      html  css  js  c++  java
  • MySQL学习笔记:regexp正则表达式

      在MySQL中,模糊搜索的时候主要用两种方式:

    1.like
    2.regexp + 正则表达式 性能优于like


     

      正则表达式描述了一组字符串。

    •   最简单的正则表达式是不含任何特殊字符的正则表达式。例如,正则表达式hello匹配hello。
    •   非平凡的正则表达式采用了特殊的特定结构,从而使得它们能够与1个以上的字符串匹配。例如,正则表达式hello|word匹配字符串hello或字符串word。
    •   作为一个更为复杂的示例,正则表达式B[an]*s匹配下述字符串中的任何一个:Bananas,Baaaaas,Bs,以及以B开始、以s结束、并在其中包含任意数目a或n字符的任何其他字符串。

      例子:

        邮箱格式: '^[A-Z0-9._%-]+@[A-Z0-9.-]+.[A-Z]{2,4}$'

      主要使用的操作符如下:

      

    1.(^)字符

      匹配字符串的开始位置,如“^a”表示以字母a开头的字符串。

    SELECT 'xxxxyy' REGEXP '^xx';

    2.($)字符

      匹配字符串的结束位置,如“X^”表示以字母X结尾的字符串。

    SELECT 'xxxxyy' REGEXP 'Y$'; # 不区分大小写
    SELECT 'xxxxyy' REGEXP 'y$';

    3.(.)字符

      这个字符就是英文下的点,它匹配任何一个字符,包括回车、换行等。

    4.(*)字符

      星号匹配0个或多个字符,在它之前必须有内容。

    SELECT 'xxxxyy' REGEXP 'x*';

    5.(+)字符

      匹配1个或多个字符,在它之前也必须有内容。加号跟星号的用法类似,只是星号允许出现0次,加号则必须至少出现一次。

    6.(?)字符

      问号匹配0次或1次。


      其他实例:

    # 以"举报"开头
    SELECT * FROM rep_require WHERE order_title REGEXP '^举报';
    
    # 以"问题"结尾
    SELECT * FROM rep_require WHERE order_title REGEXP '问题$';
    
    # 包含"无照经营"字符串
    SELECT * FROM rep_require WHERE order_title REGEXP '无照经营';
    
    # 以a-z开头 或者 ok结尾
    SELECT * FROM rep_require WHERE order_title REGEXP '^[a-z]|ok$';
    SELECT 'fonfo' REGEXP '^fo$'; # -- 字符串完全等于fo 定义了开头和结尾
    SELECT 'fonfo' REGEXP '^fo.+fo$';  # -- fo开头 中间包含至少1个字符 fo结尾
    SELECT 'fonfo' REGEXP '^fo.*fo$'; # -- . 不用加[] fo开头 fo结尾 中间随意
    SELECT 'fofo' REGEXP '^fo$'; # -- 不行
    SELECT 'fofo' REGEXP '^f.*'; # -- f开头 后面随意 0个或者无数个
    SELECT 'Ban' REGEXP '^Ba*n';  # -- 以B开头 任意几个a 再n
    SELECT 'Baaaaan' REGEXP '^Ba*n';  # -- 同上
    SELECT 'Bn' REGEXP '^Ba*n';    # -- 同上
    
    SELECT 'Ban' REGEXP '^Ba+n'; #  # -- 至少一个a
    SELECT 'Bn' REGEXP '^Ba+n'; # -- 不行 没有a 匹配不到
    
    SELECT 'Ban' REGEXP '^Ba?n'; # -- 0个a 或者 1个a
    SELECT 'Bn' REGEXP '^Ba?n';  # -- 同上
    SELECT 'Baaaan' REGEXP '^Ba?n';  # -- 同上
    # pi 或者 apa 规定了^$ 就必须完全相等才能匹配得到
    SELECT 'pi' REGEXP 'pi|apa';
    SELECT 'axe' REGEXP 'pi|apa';
    SELECT 'apa' REGEXP 'pi|apa';
    SELECT 'apa' REGEXP '^(pi|apa)$';
    SELECT 'pi' REGEXP '^(pi|apa)$';
    SELECT 'pix' REGEXP '^(pi|apa)$';
    # 多个pi匹配
    SELECT 'pi' REGEXP '^(pi)*$';
    SELECT 'pip' REGEXP '^(pi)*$';
    SELECT 'pipi' REGEXP '^(pi)*$';

    特殊写法:{1} {1,} {2,3} 

    • a* 可以写成{0,}
    • a+ 可以写成a{1,}
    • a? 可以写成a{0,1}

      在{}内只有一个整型参数i,表示字符只能出现i次;

      在{}内有一个整型参数i,后面跟一个“,”,表示字符可以出现i次或i次以上;

      在{}内只有一个整型参数i,后面跟一个“,”,再跟一个整型参数j,表示字符只能出现i次以上,j次以下(包括i次和j次)。

      其中的整型参数必须大于等于0,小于等于 RE_DUP_MAX(默认是255)。

      如果有两个参数,第二个必须大于等于第一个。

    # {1} {1,} {2,3} 写法
    SELECT 'xxx' REGEXP 'x{4}'; # 4个x
    SELECT 'aXbc' REGEXP '[a-dXYZ]'; # 匹配“a”、“b”、“c”、“d”或“X”
    SELECT 'aXbc' REGEXP '^[a-dXYZ]$';
    SELECT 'aXbc' REGEXP '^[a-dXYZ]+$';
    SELECT 'aXbc' REGEXP '^[^a-dXYZ]+$'; # 匹配除“a”、“b”、“c”、“d”、“X”以外的任何字符。
    SELECT 'gheis' REGEXP '^[^a-dXYZ]+$';
    SELECT 'gheisa' REGEXP '^[^a-dXYZ]+$';
    # “[”、“]”必须成对使用

    END 2018-06-01 13:17:19 

  • 相关阅读:
    Azure 虚拟机安全加固整理
    AzureARM 使用 powershell 扩容系统磁盘大小
    Azure Linux 云主机使用Root超级用户登录
    Open edX 配置 O365 SMTP
    powershell 根据错误GUID查寻错误详情
    azure 创建redhat镜像帮助
    Azure Powershell blob中指定的vhd创建虚拟机
    Azure Powershell 获取可用镜像 PublisherName,Offer,Skus,Version
    Power BI 连接到 Azure 账单,自动生成报表,可刷新
    Azure powershell 获取 vmSize 可用列表的命令
  • 原文地址:https://www.cnblogs.com/hider/p/9121147.html
Copyright © 2011-2022 走看看