美文网首页
MySQL 正则表达式查询

MySQL 正则表达式查询

作者: 乘风破浪的姐姐 | 来源:发表于2020-06-28 18:12 被阅读0次

    正则表达式用来匹配文本的特殊的串(字符集合)。正则表达式用正则表达式语言来建立,正则表达式语言是用来完成匹配特殊的串的一种特殊语言。

    Regexp关键字告诉MySQL后面所跟的东西作为正则表达式处理。
    以下使用student、courses、classes表查询
    student表


    image.png

    courses表


    image.png

    classes表


    image.png

    查询s_name 中有有 ‘王’字的姓名(与like关键字类似)

    select s_no,s_sex,s_name from student where s_name REGEXP BINARY '王' order by s_name;
    
    image.png

    查询coursesname中包含H的名字,不区分大小写

    select * from courses s where s.coursesname REGEXP  'H' order by s.coursesname;
    
    image.png

    利用关键字REGEXP BINARY 关键字,可以进行大小写区分。

    select * from courses s where s.coursesname REGEXP BINARY 'h' order by s.coursesname;
    
    image.png

    Regexp 进行OR匹配
    ‘|’ 表示OR操作符,它表示匹配其中之一,因此H和J都匹配并返回
    多个OR条件,可以利用单个正则表达式进行匹配。

    select * from courses s where s.coursesname REGEXP  'H|J' order by s.coursesname;
    
    image.png

    Regexp 进行特定字符匹配
    Regexp 匹配几个字符之一,利用 [] 表示、另一种形式的OR

    王[丽|红|艳] == 王丽 或者王红 或者王艳 为 王[丽|红|艳] 的缩写

    select s_no,s_sex,s_name from student where s_name REGEXP  '王[丽|芳]' order by s_name;
    
    image.png

    也可以不带括号:

    select s_no,s_sex,s_name from student where s_name REGEXP  '王|丽|芳' order by s_name;
    
    image.png

    Regexp 进行范围匹配
    [0-9] 0到9数字匹配
    [a-z] a到z字母匹配

    select * from classes s where s.classname REGEXP  'p[A-Z]' order by s.classname;
    
    image.png
    select * from classes s where s.classname REGEXP  'py[0-9]' order by s.classname;
    
    image.png

    Regexp 进行特殊字符匹配
    特殊字符匹配,多数的正则表达式实现是使用单个的反斜杠进行转义特殊字符

     select * from classes s where s.classname REGEXP  '\\.' order by s.classname;
    
    image.png

    匹配连在一起的3位数字

     select * from classes s where s.classname REGEXP  '[[:digit:]]{3}'   order by s.classname;
     select * from classes s where s.classname REGEXP  '[0-9]{3}'   order by s.classname;
    
    image.png

    ^匹配字符串的开始位置

     select * from classes s where s.classname REGEXP  '^p'   order by s.classname;
    
    image.png

    $ 匹配字符串的结束位置

     select * from classes s where s.classname REGEXP  '#$'   order by s.classname;
    
    image.png

    $ 匹配字符串最后三个字符是数字

     select * from classes s where s.classname REGEXP  '[0-9]{3,}$'   order by s.classname;
    
    image.png

    ^ 与 $ 的结合使用
    查询以p开头1结尾中间有两个任意字符的记录

    select * from classes s where s.classname REGEXP  '^p..1$' order by s.classname;
    
    image.png

    相关文章

      网友评论

          本文标题:MySQL 正则表达式查询

          本文链接:https://www.haomeiwen.com/subject/nnuhxktx.html