34人参与 • 2025-08-09 • 正则表达式
mysql 支持正则表达式(regular expression),用于在查询中进行复杂的模式匹配。它主要通过 regexp
或 rlike
操作符实现(两者功能相同),以及 mysql 8.0 及以上版本提供的扩展函数。以下内容将逐步解释其用法、模式和注意事项。
regexp
和 rlike
是等价的,用于在 where
子句中匹配字符串模式。select * from 表名 where 列名 regexp '模式';
1
(真);否则返回 0
(假)。select * from users where username regexp '^a';
mysql 正则表达式基于 posix 扩展正则表达式(ere)标准。以下是常见元字符和模式:
.
:匹配任意单个字符(除换行符外),例如 'a.c'
匹配 "abc" 或 "aac"。^
:匹配字符串开头,例如 '^start'
匹配以 "start" 开头的字符串。$
:匹配字符串结尾,例如 'end$'
匹配以 "end" 结尾的字符串。[abc]
:匹配 "a"、"b" 或 "c" 中的任意一个字符。[^abc]
:匹配除 "a"、"b"、"c" 外的任意字符。[a-z]
:匹配任意小写字母。*
:匹配前一个元素零次或多次,例如 'ab*c'
匹配 "ac"、"abc"、"abbc" 等。+
:匹配前一个元素一次或多次,例如 'ab+c'
匹配 "abc"、"abbc",但不匹配 "ac"。?
:匹配前一个元素零次或一次,例如 'ab?c'
匹配 "ac" 或 "abc"。{n}
:匹配前一个元素恰好 $n$ 次,例如 'a{3}'
匹配 "aaa"。{n,}
:匹配前一个元素至少 $n$ 次,例如 'a{2,}'
匹配 "aa"、"aaa" 等。{n,m}
:匹配前一个元素 $n$ 到 $m$ 次,例如 'a{2,4}'
匹配 "aa"、"aaa" 或 "aaaa"。|
:表示“或”,例如 'apple|banana'
匹配 "apple" 或 "banana"。()
:用于分组,例如 '(ab)+'
匹配 "ab"、"abab" 等。\\
转义特殊字符,例如 '\\.'
匹配字面点号 "."。从 mysql 8.0 开始,引入了更强大的函数:
regexp_like(字符串, '模式')
。
select regexp_like('hello', '^h') as result; -- 返回 1
regexp_instr(字符串, '模式')
。select regexp_instr('abc123', '[0-9]+') as position; -- 返回 4(数字起始位置)
regexp_substr(字符串, '模式')
。select regexp_substr('email: test@example.com', '[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\\.[a-za-z]{2,}') as email; -- 返回 "test@example.com"
regexp_replace(字符串, '模式', '替换文本')
。select regexp_replace('phone: 123-456', '[0-9]{3}-[0-9]{3}', '***-***') as masked; -- 返回 "phone: ***-***"
select * from data where content regexp '[0-9]{3,}';
select * from users where email regexp '^[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\\.[a-za-z]{2,}$';
select regexp_substr('2023-10-05 event', '[0-9]{4}-[0-9]{2}-[0-9]{2}') as date; -- 返回 "2023-10-05"
binary
关键字或 regexp_like
的选项,例如 regexp_like(str, 'pattern', 'c')
('c' 表示大小写敏感)。like
查询更慢,避免在大表上频繁使用。优先考虑索引或全文搜索。regexp
/rlike
支持所有 mysql 版本。regexp_replace
)仅限 mysql 8.0+。'\\.'
,而非单反斜杠。mysql 正则表达式提供灵活的文本匹配能力,适用于数据验证、清洗和提取。核心操作符 regexp
适用于基础匹配,而 mysql 8.0+ 的函数扩展了功能。使用时,注意模式语法、性能优化和版本限制。推荐先在小型数据集上测试模式,再应用到生产环境。
到此这篇关于mysql 正则表达式用法、模式和注意事项详解的文章就介绍到这了,更多相关mysql 正则表达式说明内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论