mysql正则函数REGEXP使用及说明
在 MySQL 中,REGEXP 是用于正则表达式模式匹配的操作符,其功能与 RLIKE 相同。
从 MySQL 8.0 开始,还引入了更规范的函数形式如 REGEXP_LIKE()、REGEXP_SUBSTR()、REGEXP_REPLACE() 等,增强了正则处理能力。
核心要点
基本语法
column_name REGEXP ‘pattern’:返回 1(匹配)或 0(不匹配)。
默认不区分大小写,但受字段排序规则(collation)影响;若需区分大小写,可使用 BINARY 或 REGEXP_LIKE(…, ‘c’)。
支持的元字符与量词(基于 Henry Spencer 正则库,POSIX ERE 子集):
^、$、.、*、+、?、[]、|、{n}、{n,}、{n,m}
不支持 \d、\w、\s 等 Perl 风格简写,应分别用 [0-9]、[a-zA-Z0-9]、[[:space:]] 替代。
版本差异
MySQL 5.7 及以下:仅支持基本 POSIX BRE,部分语法(如 +、?)需转义或改用 {1,}、{0,1}。
MySQL 8.0+:采用 ICU 引擎,支持更多 POSIX ERE 特性,推荐使用 REGEXP_LIKE() 等函数以提高可读性和控制力。
常用函数与示例
REGEXP_LIKE()(MySQL 8.0+)
SELECT * FROM users WHERE REGEXP_LIKE(email, '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$', 'c');
REGEXP_SUBSTR()(MySQL 8.0+)
提取首次匹配的子串
SELECT REGEXP_SUBSTR('user_123_order_456', '[0-9]+', 1, 1); -- 返回 '123'
REGEXP_REPLACE()(MySQL 8.0+)
替换匹配内容
SELECT REGEXP_REPLACE('abc123def', '[0-9]+', ''); -- 返回 'abcdef'
REGEXP_INSTR()(MySQL 8.0+)
返回匹配位置(从 1 开始)
SELECT REGEXP_INSTR('dog cat dog', 'dog'); -- 返回 1
SELECT REGEXP_INSTR('dog cat dog', 'dog', 2); -- 返回 9(从第2个字符开始找第二次匹配)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
MySQL 使用 Performance Schema 定位和解决慢
本文介绍了如何使用MySQL的PerformanceSchema来定位和解决慢SQL查询问题,通过启用PerformanceSchema并分析相关的系统表,可以收集到详细的性能数据,从而识别出影响性能的SQL语句,优化策略包括优化查询语句、调整数据库配置等2025-02-02
sphinxql如何得到结果数及show meta的详细说明
想用sphinxql只得到结果数。跟mysql里的count(*)一样2013-02-02


最新评论