游乐游手机版
首页/数据库/文章详情

SQL中的字符串正则表达式常见示例代码

时间:2026-04-19 18:20
正则表达式的基本概念 正则表达式(Regular Expression,常缩写为regex或regexp)是程序员处理文本的利器。它通过一套精炼的符号规则,精准描述和匹配字符串中的字符组合模式。无论是表单验证、数据清洗、日志分析,还是URL路由匹配,正则表达式都扮演着核心角色。几乎所有主流编程语言都

正则表达式的基本概念

正则表达式(Regular Expression,常缩写为regexregexp)是程序员处理文本的利器。它通过一套精炼的符号规则,精准描述和匹配字符串中的字符组合模式。无论是表单验证、数据清洗、日志分析,还是URL路由匹配,正则表达式都扮演着核心角色。几乎所有主流编程语言都内置了正则支持,这充分证明了其在文本处理领域的通用性与不可替代性。

正则表达式的基础字符

理解正则表达式的关键在于掌握其字符体系。它主要由普通字符和具有特殊功能的符号构成。其中,元字符是定义匹配规则的核心符号,而转义字符则以反斜杠\开头,用于代表一类特定的字符。一个实用技巧是:若需匹配文本中实际的反斜杠,需使用\\进行转义。

元字符

以下是构建正则模式的核心元字符,它们是实现精准匹配的基石:

  • .:匹配除换行符外的任意单个字符。
  • *:匹配前一个字符或子模式零次或多次(贪婪匹配)。
  • +:匹配前一个字符或子模式一次或多次
  • ?:匹配前一个字符或子模式零次或一次,表示可选。
  • {n}:精确匹配前一个字符连续出现n次
  • {n,}:匹配前一个字符至少出现n次
  • {n,m}:匹配前一个字符出现次数在n到m之间
  • []:定义字符集,匹配括号内的任意一个字符。
  • [^]:定义否定字符集,匹配不在括号内的任意一个字符。
  • ^:匹配字符串的起始位置。
  • $:匹配字符串的结束位置。
  • ():分组符号,用于组合子模式,便于引用或应用量词。
  • |:逻辑“或”,匹配其左侧或右侧的任一模式。
  • -:在字符集[]内表示范围(如[a-z]),在字符集外则为普通连字符。

转义字符

转义字符简化了对常见字符类别的匹配,极大提升了模式的可读性与编写效率:

  • \d:匹配任意数字,等价于[0-9]
  • \w:匹配任意单词字符(字母、数字、下划线),等价于[a-zA-Z0-9_]
  • \s:匹配任意空白字符(空格、制表符、换行符等)。
  • \b:匹配单词边界。例如\bword\b能精确匹配独立单词“word”。
  • \D:匹配任意非数字字符,是\d的反义。
  • \W:匹配任意非单词字符,是\w的反义。
  • \S:匹配任意非空白字符,是\s的反义。

常见的正则表达式示例

掌握理论后,通过实际案例能更好地理解正则表达式的应用。以下是几个高频使用的匹配模式:

  • 匹配电子邮件地址
\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b

该模式的工作原理是:首先匹配由字母、数字、点、下划线等组成的用户名部分,接着是“@”符号,然后是允许字母、数字和连字符的域名,最后以点号和至少两个字母的顶级域名结尾。\b确保匹配的是完整的邮箱地址。

  • 匹配日期(YYYY-MM-DD格式)
\d{4}-\d{2}-\d{2}

规则清晰:四位年份、两位月份、两位日期,中间用短横线连接。这是匹配标准日期格式的简洁方案。

  • 匹配中国大陆手机号码
^1[3-9]\d{9}$

匹配以1开头,第二位为3-9,后接恰好9位数字的11位手机号。^$确保匹配整个字符串,避免部分匹配。

  • 匹配简单的HTML标签内容
<[^>]+>(.*)]+>

此模式用于捕获类似内容结构中的文本内容。<[^>]+>匹配开始标签,(.*)捕获标签间的所有内容,]+>匹配结束标签。请注意,它不适合处理嵌套的复杂HTML结构。

SQL中应用正则表达式

正则表达式在SQL数据库查询与数据处理中同样至关重要,它能高效解决传统LIKE操作符难以应对的复杂模式匹配问题。

字符串查找

使用REGEXP(在某些数据库中为RLIKE)操作符,可以筛选出符合特定模式的数据行。

SELECT *
FROM 表名
WHERE 字符串字段 REGEXP '正则表达式';

此功能通常适用于VARCHARTEXT等文本类型字段。

字符串替换

对于需要根据复杂规则进行数据清洗或替换的场景,regexp_replace函数是理想工具。

SELECT regexp_replace(str, pattern, replace_str, occurrence)
FROM 表名;

参数说明如下:

  • str:原始待处理的字符串。
  • pattern:用于搜索匹配的正则表达式模式。
  • replace_str:用于替换匹配内容的新字符串。
  • occurrence:控制替换行为。设为0表示替换所有匹配项;设为正整数n则仅替换第n个匹配项。

常见案例

以一道LeetCode风格的SQL题目为例:查找有效邮箱的用户

题目要求筛选出邮箱符合以下规则的用户记录:

  • 邮箱前缀可包含字母(大小写)、数字、下划线、点或短横线。
  • 邮箱前缀必须以字母开头。
  • 域名固定为@leetcode.com

对应的SQL查询语句如下:

SELECT user_id, name, mail
FROM Users
WHERE mail REGEXP '^[a-zA-Z][a-zA-Z0-9_.-]*\\@leetcode\\.com$';

正则解析:^[a-zA-Z]确保首字符为字母;[a-zA-Z0-9_.-]*匹配零个或多个允许的后续字符;注意@和点.均需转义,以匹配其字面含义。

总结

正则表达式堪称文本处理的瑞士军刀,其强大功能与灵活性使其成为开发者必备技能。尽管初看符号繁多,但掌握元字符与转义字符的核心语法后,便能逐步拆解任何复杂模式。从数据验证、信息提取到SQL高级查询,正则的应用贯穿于整个数据处理流程。精通正则表达式,将显著提升你解决字符串相关问题的效率与精度。对于复杂正则的编写,务必遵循“多测试、多验证”的原则。

来源:https://www.jb51.net/database/3417095bv.htm
上一篇Oracle中的Schema和表空间使用详解 下一篇whenever 在数据库设计中的角色与作用
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
金仓数据库逻辑备份实战:全库导出与模式替换全流程
数据库 · 2026-07-03

金仓数据库逻辑备份实战:全库导出与模式替换全流程

在长期的运维实践中,我越来越体会到,备份就像一份保险——平时看似无用,但关键时刻却是唯一的救命稻草。逻辑备份看似简单,可真正执行恢复时,各种陷阱接连浮现:表名大小写不一致、Schema 未正确切换、Owner 属性未同步修改……任何一个环节处理不当,最终恢复出的数据库就会与预期相去甚远。 本文将深入

金仓数据库sys_rman物理备份全流程演练与误覆盖恢复
数据库 · 2026-07-03

金仓数据库sys_rman物理备份全流程演练与误覆盖恢复

干运维这行,逻辑备份和物理备份我都接触过,但说句实在话,真正能在生产环境里扛住事儿的,还得是物理备份。逻辑备份导出的是 SQL 语句,数据量一大,那速度慢得让人抓狂,而且最关键的是,它没法做时间点恢复。物理备份不一样,它直接拷贝数据文件,再配上 WAL 归档日志,想恢复到过去哪一秒都行,这是它最硬核

Windows下将MySQL注册为系统自启服务教程
数据库 · 2026-07-03

Windows下将MySQL注册为系统自启服务教程

先说一个关键前提:务必以管理员身份运行终端,否则 mysqld --install 这条命令几乎不可能成功。问题不在于命令写错,而是 Windows 系统的用户账户控制(UAC)机制会在中途拦截——在普通 CMD 或 PowerShell 窗口执行这条命令,要么直接提示 Access is deni

Mac版Navicat中快速对比两个数据库的表结构异同
数据库 · 2026-07-03

Mac版Navicat中快速对比两个数据库的表结构异同

直接说结论:Mac 版 Navicat 和 Windows 版在表结构比对逻辑上完全一致。但默认配置下,它确实无法承受“全库一键比对上万张表”的压力。要想避免卡死、内存溢出、进度条永远停在 0%,你必须手动将表分批处理,或者利用前缀过滤来控制扫描范围。 为什么 Mac 上点击「结构同步」后界面会卡住

MySQL中UNION操作推荐用UNION ALL的原因
数据库 · 2026-07-03

MySQL中UNION操作推荐用UNION ALL的原因

MySQL中UNION与UNION ALL性能对比:别再被“保险”迷惑,差距远超预期 先给出核心结论:UNION ALL 的性能通常比 UNION 高出不止一个数量级。原因在于,UNION 在合并结果集后会自动触发去重操作,这往往伴随着隐式排序,进而产生临时表和文件排序。而 UNION ALL 则直