当前位置 主页 > 技术大全 >

    mysql正则表达式,用于灵活地查找、筛选符合特定模式的字符串

    栏目:技术大全 时间:2025-09-22 14:06


    MySQL 支持使用正则表达式进行复杂的字符串匹配,主要通过 REGEXP 或 RLIKE 操作符(两者功能相同)实现。正则表达式可以用于灵活地查找、筛选符合特定模式的字符串。

    一、基本语法

    sql
    SELECT 列名 FROM 表名 WHERE 列名 REGEXP '正则表达式';
    
     
    • REGEXP 匹配时不区分大小写(若需区分,可使用 REGEXP BINARY)。
    • 若要反向匹配(不符合模式的结果),使用 NOT REGEXP

    二、常用正则表达式元字符

    元字符 说明 示例    
    . 匹配任意单个字符(除换行符) 'a.c' 匹配 "abc"、"a1c" 等    
    * 匹配前面的字符 0 次或多次 'ab*c' 匹配 "ac"、"abc"、"abbc" 等    
    + 匹配前面的字符 1 次或多次 'ab+c' 匹配 "abc"、"abbc" 等(不匹配 "ac")    
    ? 匹配前面的字符 0 次或 1 次 'ab?c' 匹配 "ac"、"abc"(不匹配 "abbc")    
    ^ 匹配字符串开头 '^abc' 匹配以 "abc" 开头的字符串    
    $ 匹配字符串结尾 'abc$' 匹配以 "abc" 结尾的字符串    
    [] 匹配括号内的任意一个字符 '[abc]' 匹配 "a"、"b" 或 "c"    
    [^] 匹配不在括号内的任意一个字符 '[^abc]' 匹配除 "a"、"b"、"c" 外的字符    
    `a b` 匹配 a 或 b `'a b'`匹配"a"或"b"
    {n} 匹配前面的字符恰好 n 次 'a{2}' 匹配 "aa"    
    {n,} 匹配前面的字符至少 n 次 'a{2,}' 匹配 "aa"、"aaa" 等    
    {n,m} 匹配前面的字符 n 到 m 次 'a{2,3}' 匹配 "aa"、"aaa"    
    [0-9] 匹配数字 等价于 '[[:digit:]]'    
    [a-zA-Z] 匹配字母 等价于 '[[:alpha:]]'    

    三、示例

    假设有一张 users 表,包含 username 字段,以下是常见查询场景:
    1. 匹配以 "a" 开头的用户名
      sql
      SELECT username FROM users WHERE username REGEXP '^a';
      
       
       
    2. 匹配以 "er" 结尾的用户名
      sql
      SELECT username FROM users WHERE username REGEXP 'er$';
      
       
       
    3. 匹配包含 "ab" 或 "cd" 的用户名
      sql
      SELECT username FROM users WHERE username REGEXP 'ab|cd';
      
       
       
    4. 匹配包含数字的用户名
      sql
      SELECT username FROM users WHERE username REGEXP '[0-9]';
      -- 或使用预定义类
      SELECT username FROM users WHERE username REGEXP '[[:digit:]]';
      
       
       
    5. 匹配长度为 3 的用户名(由字母组成)
      sql
      SELECT username FROM users WHERE username REGEXP '^[a-zA-Z]{3}$';
      
       
       
    6. 区分大小写匹配(仅匹配大写 "A" 开头的用户名)
      sql
      SELECT username FROM users WHERE username REGEXP BINARY '^A';
      
       
       
    7. 匹配邮箱格式(简单校验)
      sql
      SELECT email FROM users 
      WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';
      
       
       

    四、注意事项

    1. 性能问题:正则表达式匹配可能比普通字符串匹配(如 LIKE)更消耗性能,尤其是在大数据量的表中,建议结合索引使用。
    2. 与 LIKE 的区别LIKE 仅支持简单通配符(% 和 _),而正则表达式支持更复杂的模式匹配。
    3. 版本差异:MySQL 8.0 对正则表达式的支持更完善(如支持 \d 表示数字),低版本可能需要使用 [0-9] 等兼容写法。
    通过正则表达式,MySQL 可以实现灵活的字符串筛选,适用于数据清洗、格式校验等场景。
1分钟搞定MySQL部署!Docker最强实操指南,含所有常用命令和配置
忘记MySQL密码怎么办?别慌!用这一招跳过验证,轻松重置管理员权限
MySQL自增主键用完怎么办?从原理到实战,全面破解开发中的高频难题
MySQL权限混乱?这几个命令让你彻底理清用户清单与权限归属
你的数据库安全吗?读懂MySQL这几种日志,关键时刻能「救你一命」
MySQL性能上不去?八成是这里没配好!手把手教你搞定my.cnf核心配置
修改MySQL字段长度别乱来!这3个核心要点和1个致命陷阱,新手必看
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
你的MySQL数据库为什么总是又慢又卡?掌握这五大优化法则,查询速度快十倍!(上篇)
你的MySQL数据库为什么总是又慢又卡?掌握这五大优化法则,查询速度快十倍!(下篇)