前言

在 MySQL 数据库中,正则表达式(Regular Expression,简称 regex)是一种强大的文本匹配工具,可以帮助我们在查询数据时实现灵活的字符串筛选。本文将介绍 MySQL 中正则表达式的基本用法和常见语法,适合新手入门。

一、正则表达式的应用场景

  1. 模糊查询 :比 LIKE 更灵活,可以匹配复杂的字符串模式。
  2. 数据清洗 :查找或过滤出符合特定格式的数据,如手机号、邮箱等。
  3. 批量替换 :配合 REGEXP_REPLACE (MySQL 8.0+)进行字符串替换。

二、MySQL 中正则表达式的基本用法

MySQL 提供了 REGEXPRLIKE 操作符用于正则匹配。例如:

SELECT * FROM users WHERE email REGEXP '@gmail\\.com$' ;

上例会查找所有以 @gmail.com 结尾的邮箱。

常用语法

  • . :匹配任意单个字符(换行符除外)
  • * :匹配前面的内容零次或多次
  • + :匹配前面的内容一次或多次(MySQL 8.0+ 支持)
  • ? :匹配前面的内容零次或一次(MySQL 8.0+ 支持)
  • ^ :匹配字符串的开始
  • $ :匹配字符串的结尾
  • [abc] :匹配 a、b 或 c 中的任意一个字符
  • [^abc] :匹配除 a、b、c 之外的任意字符
  • {n,m} :匹配前面的内容至少 n 次,至多 m 次(MySQL 8.0+ 支持)

示例

  1. 查找手机号(以 1 开头,11 位数字)
SELECT * FROM users WHERE phone REGEXP '^1[0-9]{10}$' ;
  1. 查找包含数字的数据
SELECT * FROM products WHERE name REGEXP '[0-9]' ;
  1. 查找以字母 a 开头的数据
SELECT * FROM items WHERE name REGEXP '^a' ;

三、注意事项

  • MySQL 5.x 版本的正则表达式语法较为基础,部分高级语法(如 +?{n,m} )仅在 MySQL 8.0 及以上版本支持。
  • 正则表达式匹配通常比普通查询慢,建议仅在必要时使用。
  • 匹配时区分大小写,如需不区分大小写,可使用 COLLATE 关键字。

四、进阶用法(MySQL 8.0+)

MySQL 8.0 新增了 REGEXP_REPLACEREGEXP_SUBSTR 等函数,支持更丰富的正则操作。例如:

-- 替换手机号中的中间四位为****
SELECT REGEXP_REPLACE(phone, '(\\d{3})\\d{4}(\\d{4})', '\\1****\\2') FROM users;

总结 :MySQL 的正则表达式为数据查询和处理提供了极大的灵活性。掌握基本语法和应用场景,可以让你在实际开发中更加高效地处理字符串数据。

补充

在 MySQL 的正则表达式语法中,常用的通配符 % 实际上并不是正则表达式的语法,而是 SQL 语句中 LIKE 操作符的通配符。

  • %LIKE 中表示任意长度的任意字符(包括零个字符),而在正则表达式中并没有 % 这个符号的特殊含义。
  • 正则表达式中用于匹配任意字符和数量的通常是 .* ,其中 . 匹配任意单个字符, * 表示前面的内容出现零次或多次。
分类: MySQL 标签: 正则MySQLregex

评论

暂无评论数据

暂无评论数据

目录