MySQL 支持使用正则表达式进行复杂的字符串匹配,主要通过 REGEXP 或 RLIKE 操作符(两者功能相同)实现。正则表达式可以用于灵活地查找、筛选符合特定模式的字符串。
SELECT 列名 FROM 表名 WHERE 列名 REGEXP '正则表达式';
-
REGEXP 匹配时不区分大小写(若需区分,可使用 REGEXP BINARY)。
-
若要反向匹配(不符合模式的结果),使用
NOT REGEXP。
假设有一张 users 表,包含 username 字段,以下是常见查询场景:
-
匹配以 "a" 开头的用户名:
SELECT username FROM users WHERE username REGEXP '^a';
-
匹配以 "er" 结尾的用户名:
SELECT username FROM users WHERE username REGEXP 'er$';
-
匹配包含 "ab" 或 "cd" 的用户名:
SELECT username FROM users WHERE username REGEXP 'ab|cd';
-
匹配包含数字的用户名:
SELECT username FROM users WHERE username REGEXP '[0-9]';
SELECT username FROM users WHERE username REGEXP '[[:digit:]]';
-
匹配长度为 3 的用户名(由字母组成):
SELECT username FROM users WHERE username REGEXP '^[a-zA-Z]{3}$';
-
区分大小写匹配(仅匹配大写 "A" 开头的用户名):
SELECT username FROM users WHERE username REGEXP BINARY '^A';
-
匹配邮箱格式(简单校验):
SELECT email FROM users
WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';
-
性能问题:正则表达式匹配可能比普通字符串匹配(如
LIKE)更消耗性能,尤其是在大数据量的表中,建议结合索引使用。
-
与
LIKE 的区别:LIKE 仅支持简单通配符(% 和 _),而正则表达式支持更复杂的模式匹配。
-
版本差异:MySQL 8.0 对正则表达式的支持更完善(如支持
\d 表示数字),低版本可能需要使用 [0-9] 等兼容写法。
通过正则表达式,MySQL 可以实现灵活的字符串筛选,适用于数据清洗、格式校验等场景。