当前位置: 首页 > news >正文

MySQL中【正则表达式】用法

MySQL正则表达式通过 REGEXPRLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例:


一、基础语法

SELECT column_name 
FROM table_name 
WHERE column_name REGEXP 'pattern';
-- 或
WHERE column_name RLIKE 'pattern';

二、常用元字符

元字符说明示例
^匹配开头'^a' → 以 “a” 开头
$匹配结尾'z$' → 以 “z” 结尾
.匹配任意单个字符'a.c' → “abc”, “axc”
[...]字符集合'[aeiou]' → 匹配任一元音
[^...]排除字符集合'[^0-9]' → 非数字字符
*前一个字符0次或多次'ab*c' → “ac”, “abbc”
+前一个字符1次或多次'ab+c' → “abc”, “abbc” (排除"ac")
{n}前一个字符n次'a{3}' → “aaa”
|或操作'cat|dog' → “cat” 或 “dog”

三、实际示例

  1. 匹配以数字开头的字符串

    SELECT name FROM products WHERE name REGEXP '^[0-9]';
    
  2. 匹配包含特定单词的文本

    SELECT content FROM logs WHERE content REGEXP 'error|warning';
    
  3. 匹配邮箱格式

    SELECT email FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$';
    
  4. 匹配连续重复字符

    SELECT word FROM dictionary WHERE word REGEXP '(.)\\1'; -- 如 "book"('oo')
    

四、与 LIKE 的区别

特性REGEXPLIKE
功能复杂模式匹配简单通配符 (%, _)
大小写敏感默认不敏感(除非二进制字符串)依赖字段排序规则
性能通常较慢(全表扫描)可能使用索引

五、进阶函数(MySQL 8.0+)

  1. REGEXP_REPLACE()
    替换匹配的字符串:

    SELECT REGEXP_REPLACE('hello 123', '[0-9]+', 'world'); -- 结果: 'hello world'
    
  2. REGEXP_SUBSTR()
    提取匹配的子串:

    SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+'); -- 结果: 'abc'
    
  3. REGEXP_INSTR()
    返回匹配的起始位置:

    SELECT REGEXP_INSTR('abc123', '[0-9]+'); -- 结果: 4
    

六、注意事项

  1. 转义特殊字符:使用双反斜杠 \\(如 \\+, \\.)。
  2. 性能优化:避免在大型表上使用 REGEXP,优先考虑全文索引或预处理。
  3. 大小写敏感:如需区分大小写,使用 BINARY 关键字:
    WHERE BINARY column_name REGEXP 'Pattern';
    

经典案例:提取文本中的金额

SELECT REGEXP_SUBSTR(description, '[0-9]+\\.[0-9]{2}') AS amount 
FROM orders 
WHERE description REGEXP '[0-9]+\\.[0-9]{2}';

匹配如 "Price: 99.99 USD" 中的 99.99

http://www.xdnf.cn/news/947125.html

相关文章:

  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
  • 今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
  • web vue 项目 Docker化部署
  • 【DVWA系列】——xss(Reflected)——Medium详细教程
  • 破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
  • Python ROS2【机器人中间件框架】 简介
  • leetcodeSQL解题:3564. 季节性销售分析
  • 均衡后的SNRSINR
  • idea 设置git提交快捷键
  • 【习题】DevEco Studio的使用
  • 《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析(四)DPHY ECC
  • LangGraph 应用实例解析
  • 归并排序算法及其在算法中的应用
  • 使用Python 构建支持主流大模型与 Ollama 的统一接口平台
  • 查找日志文件中​​最后一次出现某个关键词的上下 20 行​​
  • ZYNQ学习记录FPGA(二)Verilog语言
  • matlab自控仿真【第一弹】❀传递函数和输出时域表达式
  • VAS1086Q 奇力科技线性芯片车规用品LED驱动芯片
  • 鸟巢邂逅 3D 全景漫游,一场科技与建筑的梦幻交织​
  • 成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
  • 【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
  • 佰力博科技与您探讨热释电测量的几种方法
  • 边缘计算设备全解析:边缘盒子在各大行业的落地应用场景
  • 如何使用 Ansible 在 Ubuntu 24.04 上安装和设置 LNMP
  • Web中间件--tomcat学习
  • Tomcat 安装和配置
  • tomcat核心组件
  • tomcat组件架构设计
  • ubuntu服务器上极简部署odoo18
  • Spring是如何解决Bean的循环依赖:三级缓存机制