• MySQL之正则表达式


    一、介绍

    正则表达式用来描述或者匹配符合规则的字符串。它的用法和 like 比较相似,但是它又比 like 更强大,能够实现一些很特殊的规则匹配。正则表达式需要使用 regexp 命令,匹配上返回 1 匹配不上返回 0,默认不加条件 regexp 相当于 like "%%",在前面加上 not 相当于 not like。

    ^          # 在字符的开头处进行匹配
    $          # 在字符的末尾处进行匹配
    .          # 匹配任何字符(包括回车和新行)
    [...]      # 匹配中括号内的任意单个字符
    [m-n]      # 匹配m到n之间的任意单个字符,例如[0-9]、[a-z]、[A-Z]
    [^..]      # 不能匹配括号内的任意单个字符
    a?         # 匹配0个或1个a
    a*         # 匹配0个或多个a,包括空,可以作为占位符使用
    a+         # 匹配1个或多个a,不包括空
    a1|a2      # 匹配a1或a2
    a{m}       # 匹配m个a
    a{m,}      # 匹配m个或者更多个a
    a{m,n}     # 匹配m到n个a
    a{,n}      # 匹配0到n个a
    (...)      # 将模式元素组成单一元素,例如:(do)?  匹配0个或1个do

    二、使用方式

    select "abc" regexp "^a"; -- 1
    select "abc" regexp "c$"; -- 1
    select "abc" regexp "a."; -- 1 
    select "abc" regexp ".a"; -- 0
    
    [...]:匹配中括号内的任意单个字符
    select "abc" regexp "[xyz]";  -- 0
    select "abc" regexp "[xya]";  -- 1
    
    [^...]:注意^符合只有在[]内才是取反的意思,在别的地方都是表示开始处匹配
    select "a" regexp "[^abc]";  -- 0
    select "x" regexp "[^abc]";  -- 1
    select "abc" regexp "[^a]";  -- 1  "abc"作为一个整体,所以它匹配不了a
    
    select "stb" regexp ".ta?b";   -- 1
    select "stab" regexp ".ta?b";  -- 1
    select "staab" regexp ".ta?b"; -- 0
    
    select "stb" regexp ".ta*b";  -- 1
    select "stab" regexp ".ta*b"; -- 1
    select "" regexp "a*";     -- 1
    
    select "stb" regexp ".ta+b";  -- 0
    select "stab" regexp ".ta+b"; -- 1
    
    select "a" regexp "a|b";    -- 1
    select "b" regexp "^(a|b)"; -- 1
    select "c" regexp "^(a|b)"; -- 0
    
    select "auuuuc" regexp "au{3}c";  -- 0
    select "auuuuc" regexp "au{4}c";  -- 1
    select "auuuuc" regexp "au{3,}c"; -- 1
    select "auuuuc" regexp "au{4,}c"; -- 1
    select "auuuuc" regexp "au{5,}c"; -- 0
    
    select "auuuuc" regexp "au{3,5}c";  -- 1
    select "auuuuc" regexp "au{4,5}c";  -- 1
    select "auuuuc" regexp "au{5,10}c"; -- 0
    
    (abc):将abc作为一个序列匹配,不用括号括起来都是用单个字符去匹配,如果要把多个字符作为一个整体去匹配就需要用到括号。
    select "xababy" regexp "x(abab)y";    -- 1
    select "xababy" regexp "x(ab)*y";     -- 1
    select "xababy" regexp "x(ab){1,2}y"; -- 1

    三、总结

    • 特别要注意最后的()的命令,如果不使用()那么所有的都是指单个字符去做匹配,如果需要使用多个字符作为一个整体去匹配,就需要将多个字符使用()给括起来;
    • 使用 regexp 和 not regexp 操作符(类似like和not like);
    • regexp 默认是不区分大小写,可以使用 binary 关键词强制区分大小写; where name regexp binary "^[A-Z]";
    • regexp 默认是部分匹配原则,即有一个匹配上则返回真。例如:select "Abc" regexp binary "^[A-Z]";
  • 相关阅读:
    USES_CONVERSION宏(转)
    推送本地仓库至多个远程仓库(转)
    .gitignore的使用
    重命名分支
    不支持尝试执行的操作——————MFC窗口打开错误
    error C1010:在查找预编译头文件时遇到意外的文件结尾——————vs错误
    抓边(一)——————————————使用halcon测量助手
    CString, string, char *之间的相互转换(转)
    css模块化
    继承、原型链、在组件开发上的应用
  • 原文地址:https://www.cnblogs.com/believepd/p/10443160.html
Copyright © 2020-2023  润新知