Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MYSQL REGEXP

MYSQL中REGEXP的实现示例

作者:nice_lcj520

本文主要介绍了MYSQL中REGEXP的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

MySQL 的 REGEXP 函数是处理复杂字符串匹配的 “瑞士军刀”,掌握它能大幅提升数据筛选效率。

一、基础扫盲:先搞懂 “是什么”

1. 什么是正则表达式?

用一句话解释:正则表达式是一套用于描述字符串模式的规则,通过特殊符号(元字符)定义匹配逻辑,比如 “匹配以字母开头、数字结尾的字符串”。

2. MySQL 中 REGEXP 的用法

特性LIKEREGEXP
匹配方式仅支持%(任意字符)和_(单个字符)支持元字符(^、$、*等),功能更灵活
部分匹配需用%pattern%实现默认就是部分匹配(无需通配符)
转义符依赖数据库设置统一用\\转义(如\\.匹配小数点)

三、核心语法:元字符与示例(重中之重)

元字符作用MySQL 示例(匹配目标)
^匹配字符串开头'^abc' → 匹配 “abc123”“abcdef”
$匹配字符串结尾'xyz$' → 匹配 “123xyz”“xxyz”
.匹配任意单个字符(除换行)'a.c' → 匹配 “abc”“a1c”“a#c”
*匹配前一个字符 0 次或多次'ab*c' → 匹配 “ac”“abc”“abbbbc”
+匹配前一个字符 1 次或多次'ab+c' → 匹配 “abc”“abbbbc”(不匹配 “ac”)
?匹配前一个字符 0 次或 1 次'ab?c' → 匹配 “ac”“abc”(不匹配 “abbc”)
[ ]匹配括号内任意单个字符'[0-9]' → 匹配任意数字;'[a-zA-Z]'匹配字母
[^ ]匹配不在括号内的任意字符'[^0-9]' → 匹配非数字字符
{n}匹配前一个字符恰好 n 次'a{3}' → 匹配 “aaa”
{n,}匹配前一个字符至少 n 次'a{2,}' → 匹配 “aa”“aaa” 等
{n,m}匹配前一个字符 n 到 m 次'a{1,3}' → 匹配 “a”“aa”“aaa”

注意:MySQL 的 REGEXP 默认不区分大小写,若需区分,可使用REGEXP BINARY,例如'abc' REGEXP BINARY 'ABC'返回 0(不匹配)。

四、实战案例:用 REGEXP 解决实际问题

这部分是博客的 “灵魂”,结合具体场景展示用法,读者可直接复用:

1. 验证格式合法性

匹配手机号(以 1 开头,11 位数字):

SELECT * FROM user WHERE phone REGEXP '^1[3-9][0-9]{9}$';

匹配邮箱(含 @和域名后缀):

SELECT * FROM user WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$';

2. 筛选包含特定模式的字符串

提取包含数字的用户名

SELECT username FROM user WHERE username REGEXP '[0-9]';

排除包含特殊字符(如!、@)的记录

SELECT * FROM user WHERE username NOT REGEXP '[!@#$%]';

3. 替换或清洗数据(结合 REGEXP_REPLACE)

MySQL 8.0 及以上支持REGEXP_REPLACE,例如清除字符串中的所有空格:

SELECT REGEXP_REPLACE(address, ' ', '') AS clean_address FROM user;

五、避坑指南:这些 “坑” 别踩

  1. 转义符的坑:MySQL 中需用\\转义(而非标准正则的\),例如匹配小数点需写\\.,否则.会被解释为 “任意字符”。
  2. 性能问题:REGEXP 匹配会全表扫描(无法使用索引),避免在大数据量表中用复杂正则,可先通过 WHERE 条件缩小范围。
  3. 版本差异:低版本 MySQL(如 5.7)不支持{n,m}?等元字符,需用*+替代;MySQL 8.0 新增对正则捕获组的支持(REGEXP_SUBSTR)。
  4. 部分匹配的 “陷阱”column REGEXP 'abc'会匹配 “abc”“xabc”“abcx”,若需精确匹配整个字符串,需加^$(如'^abc$')。

六、进阶:REGEXP 与其他函数结合

七、总结:REGEXP 学习路径

  1. 记住常用元字符(^$.*[]是基础);
  2. 先在测试库用简单案例练习(如匹配数字、字母);
  3. 复杂场景分步骤拆解(如邮箱验证可拆分为 “用户名 +@+ 域名 + 后缀”);
  4. 善用 MySQL 官方文档(点击查看)查询版本特性。

一句话收尾:REGEXP 是 MySQL 字符串处理的 “进阶技能”,看似复杂,实则掌握规律后能大幅提升效率 —— 从今天开始,告别繁琐的 LIKE 嵌套吧!

到此这篇关于MYSQL中REGEXP的实现示例的文章就介绍到这了,更多相关MYSQL REGEXP内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文