• Mysql语句的RegExp的用法与案例


    Mysql语句的RegExp的用法与案例

    一、RegExp基本语法

    1. JavaScript RegExp 参考手册
    2. MySQL REGEXP:正则表达式查询
    3. MySQL中REGEXP正则表达式使用大全

    字符描述
    ^从开始行开始匹配
    $从末端行开始匹配
    .匹配任意单个字符除了换行符
    [ ][ ] 内为字符集,匹配 [ ] 内任一字符
    [^ ]匹配除了方括号里的任意字符
    *匹配零个或多个在它前面的字 符
    +匹配前面的字符 1 次或多次
    ?匹配 0 或 1 个 ?号前的字符。
    {n,m}匹配前面的字符串至少 n 次, 至多 m 次
    (xyz)匹配与 xyz 完全相等的字符串
    \s匹配任意单个字符除了换行符
    \转义字符,匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \
    [.characters.]  在括号表达式中(使用[]),匹配用于校对元素的字符序列,字符为单个字符或新行等字符名
    
    mysql> SELECT ‘~’ REGEXP ‘[[.~.]];                                                        -> 1
    
    mysql> SELECT ‘~’ REGEXP ‘[[.tilde.]];                                                 -> 1
    
     
    
    [=character_class=]
    
    在括号表达式中(使用[]),[=character_class=]表示等同类。它与具有相同校对值的所有字符匹配,包括它本身,
    
    [[=a=]]              等同于[a(+)],[a+],[a{1,}]
    
     
    
    [:character_class:]
    
    在括号表达式中(使用[]),[:character_class:]表示与术语类的所有字符匹配的字符类。
    
    标准的类名称是:
    
    alnum 		文字数字字符
    
    alpha		文字字符
    
    blank		空白字符
    
    cntrl		控制字符
    
    digit		数字字符
    
    graph		图形字符
    
    lower		小写文字字符
    
    print		图形或空格字符
    
    punct		标点字符
    
    space		空格、制表符、新行、和回车
    
    upper		大写文字字符
    
    xdigit		十六进制数字字符
    
    [[:<:]], [[:>:]]		
    这些标记表示word边界,它们分别与word的开始和结束匹配
    word是一系列字字符,其前面和后面均没有字字符。字符是alnum类中的字母数字字符或下划线(_)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    二、Mysql使用RegExp案例

    案例1:在json数据里面,找到class_detail_students_id这个字段,并且数据包含学生编号“58888828”

    例如:在这个数据 -> {"class_id":2,"class_detail_students_id":",58888881,58888828,58888881,"}
    需要查找 -> class_detail_students_id 这个字段
    并查看 -> ,58888881,58888828,58888881, 里面是否包含58888828
    注意点:数据里面有双引号,这是regexp数据可以用单引号包围,里面的双引号用\\转义
    regexp ->  '(\\"class_detail_students_id\\")(:\\")[(0-9)|,]*(,58888828,)[(0-9)|,]*(\\")'
    
    
    解答完整的sql:
    select * from mole_class_detail_change where 
    current_value regexp '(\\"class_detail_students_id\\")(:\\")[(0-9)|,]*(,58888828,)[(0-9)|,]*(\\")'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    案例2:匹配000000002 _ _ _ _ _ _ _ _ 1900 和 000000003 _ _ _ _ _ _ _ _1700,其中"__" 这是8个空位,只能是数字

    思考:这是两个字符串,都空出中间8为数字,可以用"()"
    (000000002) -> 匹配  "000000002"
    [[:digit:]] -> 匹配  数字字符
    {8}			-> 匹配前一个括号里面8次
    |			-> 或的意思
    
    
    解答完整的sql:
    select * from mole_class_detail_change 
    where class_detail_code regexp '((000000002)([[:digit:]]{8})(1900))|((000000003)([[:digit:]]{8})(1700))'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    [NOIP2010 普及组] 三国游戏
    Vue进阶(幺陆肆):自定义指令之拖拽指令_vue 自定义拖拽指令 循环dom,
    Flask 进行 Web 开发时,常见的错误
    Jetson Agx_Orin(Ubuntu20.04)设置vnc远程桌面记录
    基于or-tools的护士排班问题建模求解
    前端开发如何做新手引导
    3.4 这些都是小红书的流量入口【玩赚小红书】
    2源码安装网络协议
    测试工程师需要具备哪些“技能”?
    2023.9.20 简单了解 HTTP协议 及 Fiddle 安装使用
  • 原文地址:https://blog.csdn.net/weixin_45941687/article/details/125629590