MySQL 中,简单前缀查询优先使用 LIKE 'prefix%';只有模式无法用 % 和 _ 表达时,才使用正则。MySQL 8 基于 ICU 提供 REGEXP_LIKE、REGEXP_INSTR、REGEXP_REPLACE 和 REGEXP_SUBSTR。
目录
判断是否匹配
SELECT id, email
FROM users
WHERE REGEXP_LIKE(email, '^[A-Za-z0-9._%+-]+@example\\.com$');
旧式操作符也能判断:
SELECT id, username
FROM users
WHERE username REGEXP '^[a-z][a-z0-9_]{2,19}$';
RLIKE 是 REGEXP 的同义形式。团队代码最好统一一种写法;需要显式控制匹配选项时,REGEXP_LIKE 更清楚。
常见模式
| 模式 | 含义 |
|---|---|
^Mac |
以 Mac 开头 |
Guide$ |
以 Guide 结尾 |
[0-9]+ |
一个或多个数字 |
[^[:space:]]+ |
一个或多个非空白字符 |
foo|bar |
foo 或 bar |
SQL 字符串和正则表达式可能各自处理一次反斜杠。匹配字面量点号时通常要写成 '\\.',应在目标 MySQL 版本和 SQL mode 下实际验证。
大小写与 match_type
匹配默认行为受字符集和 collation 影响。可以通过第三个参数明确控制:
SELECT REGEXP_LIKE('FreeMac', 'freemac', 'i'); -- 不区分大小写
SELECT REGEXP_LIKE('FreeMac', 'freemac', 'c'); -- 区分大小写
不要假设所有库、所有列都默认大小写不敏感。
提取匹配内容
SELECT REGEXP_SUBSTR('Order: FM-2026-0716', 'FM-[0-9]{4}-[0-9]{4}') AS code;
查找匹配位置:
SELECT REGEXP_INSTR('macOS 26 guide', '[0-9]+') AS first_digit_position;
没有匹配时的返回值要根据所用函数确认,不要直接用于后续字符串截取而不做判断。
替换与清洗
SELECT REGEXP_REPLACE('Free Mac Guide', '[[:space:]]+', ' ') AS normalized;
数据库内正则适合小规模查询和明确的数据修复。大批量 UPDATE 前先使用 SELECT 预览影响范围,并在事务或备份策略下执行。
性能边界
-- 通常更容易利用索引范围
WHERE slug LIKE 'mac-%'
-- 正则通常需要检查更多行
WHERE REGEXP_LIKE(slug, '^mac-')
优化顺序:先用普通条件缩小数据集,再执行正则;避免对大表无过滤扫描;把稳定、频繁查询的结构拆成独立字段,而不是长期从自由文本中提取。
不同数据库不能直接复制
PostgreSQL 使用 ~、~* 等操作符,SQLite 默认没有与 MySQL 完全相同的内建 REGEXP 实现,其他数据库的函数、正则引擎和转义规则也不同。文章和代码必须写明数据库产品及版本。
JavaScript 侧的数据处理可继续参考 数组常用方法指南 和 Event Loop 指南。
参考资料
继续阅读
LocalSend 跨平台传文件指南:不用数据线和网盘
LocalSend 是免费的局域网文件传输工具,适合安卓、Windows、iPhone 与 Mac 混用的人。本文从安装、第一次传输到搜不到设备的排查,带你不用网盘完成跨平台互传。
8 分钟Maccy 使用指南:Mac 剪贴板历史该不该装
Maccy 是一款免费开源的 Mac 剪贴板历史工具,适合经常复制文字、链接、图片和代码片段的人。本文从安全下载、第一次设置、隐私忽略规则到和 macOS 自带剪贴板历史、Raycast、Paste 的区别,帮你判断是否值得安装。
12 分钟新 Mac 先别急着装软件:系统自带的办公功能已经能做什么
从 PDF、ZIP、截图录屏到图片转换、扫描签名和隔空投送,逐项判断 macOS 自带工具能做到哪里,以及什么时候才真正需要安装第三方软件。
订阅 FreeMac
每周精选:免费 Mac 软件评测、可信来源更新、替代方案和少折腾指南。