MySQL用正则表达式进行搜索功能实例

 更新时间:2025年08月23日 10:48:54   作者:Just_ Run  
MySQL中的正则表达式是一种强大的文本匹配工具,它允许你使用特定的模式来搜索、替换或检查字符串中的数据,这篇文章主要介绍了MySQL用正则表达式进行搜索功能的相关资料,需要的朋友可以参考下

一、正则表达式介绍

  • 正则表达式是用来匹配文本的特殊的串(字符集合)。
  • 所有种类的程序设计语言、文本编辑器、操作系统等都支持正则表达式

二、使用MySQL正则表达式

  • MySQL仅支持多数正则表达式实现的一个很小的子集。

2.1基本字符匹配

REGEXP后所跟的东西作为正则表达式处理。
用法:

SELECT 列名 FROM 表名 WHERE 列名 REGEXP 正则表达式;

示例:

mysql> SELECT * FROM userinfo WHERE food LIKE 'le' ORDER BY food; # LIKE匹配整列,故无返回
Empty set (0.00 sec)

mysql> SELECT * FROM userinfo WHERE food REGEXP 'le' ORDER BY food; # REGEXP在列值内匹配
+----+----------+----------+--------+------+-------+
| id | username | password | status | age  | food  |
+----+----------+----------+--------+------+-------+
|  4 | 小张     |      397 |      0 |   24 | apple |
|  1 | 小明     |    12345 |      0 |   18 | nudle |
+----+----------+----------+--------+------+-------+
2 rows in set (0.01 sec)

2.2 OR匹配

为搜索两个串之一(或者为这个串,或者为另一个串),使用"|"
用法:

SELECT 列名 FROM 表名 WHERE 列名 REGEXP '串1|串2';

示例:

mysql> SELECT username,food FROM userinfo WHERE food REGEXP 'milk|beef'; # 正则表达式OR操作符
+----------+------+
| username | food |
+----------+------+
| 小红     | beef |
| 小刚     | milk |
+----------+------+
2 rows in set (0.00 sec)

mysql> SELECT username,food FROM userinfo WHERE food = 'milk' OR food = 'beef'; # 同子句OR
+----------+------+
| username | food |
+----------+------+
| 小红     | beef |
| 小刚     | milk |
+----------+------+
2 rows in set (0.00 sec)

2.3 匹配几个字符之一

匹配特定字符串,通过指定一组"[]"括起来的字符来完成。
用法:

SELECT 列名 FROM 表名 WHERE 列名 REGEXP '[特定字符]衔接字符';

示例:

mysql> SELECT username,food FROM userinfo WHERE food REGEXP '[bl]e'; # 匹配列值中'e'前为'b'或'l'的列,同'[b|l]e'
+----------+-------+
| username | food  |
+----------+-------+
| 小明     | nudle |
| 小红     | beef  |
| 小张     | apple |
+----------+-------+
3 rows in set (0.00 sec)

2.4 匹配范围

集合可用来定义要匹配的一个或多个字符,为简化这种类型的集合,可使用"[-]"来定义一个范围
用法:

SELECT 列名 FROM 表名 WHERE 列名 REGEXP '[范围左端-范围右端]衔接字符';

示例:

mysql> SELECT username,food FROM userinfo WHERE food REGEXP '[a-c]e'; # 匹配列值中'e'前为'a'到'c'的列
+----------+------+
| username | food |
+----------+------+
| 小红     | beef |
+----------+------+
1 row in set (0.00 sec)

2.5 匹配特殊字符

正则表达式语言由具有特定含义的特殊字符构成。为了匹配特殊字符,必须用 \ 为前导
用法:

SELECT 列名 FROM 表名 WHERE 列名 REGEXP '\\特殊字符';

示例:

mysql> SELECT username,password FROM userinfo WHERE password REGEXP '\\.'; # 匹配列值中存在特殊字符'.'的列
+----------+----------+
| username | password |
+----------+----------+
| 小红     | 67890.   |
+----------+----------+
1 row in set (0.00 sec)
  • \或\?:多数正则表达式实现使用单个反斜杠转义特殊字符,以便能使用这些字符本身。但MySQL要求两个反斜杠(MySQL自己解释一个,正则表达式库解释另一个)

2.6 匹配字符类

存在找出你自己经常使用的数字、所有字母字符或所有数字字母字符等的匹配。为更方便工作,可以使用预定义的字符集,称为字符类

2.7 匹配多个实例

有时需要对匹配的数目进行更强的控制。

示例:

mysql> SELECT username,food FROM userinfo WHERE food REGEXP '[[:alpha:]]{5}'; # 匹配存在连续5个任意字母的列
+----------+-------+
| username | food  |
+----------+-------+
| 小明     | nudle |
| 小张     | apple |
+----------+-------+
2 rows in set (0.00 sec)

2.8 定位符

目前为止的所有例子都是匹配一个串中任意位置的文本。为了匹配特定位置的文本,需要使用定位符。

用法:

SELECT 列名 FROM 表名 WHERE 列名 REGEXP '^[特定文本]'

示例:

mysql> SELECT username,food FROM userinfo WHERE food REGEXP '^[mi]';
+----------+------+
| username | food |
+----------+------+
| 小刚     | milk |
| 小浩     | mini |
+----------+------+
2 rows in set (0.00 sec)
  • 简单的正则表达式测试: 可以在不使用数据库表的情况下用SELECT来测试正则表达式。。REGEXP检查总是返回0(没有匹配)或1(匹配)。
mysql> SELECT 'hello' REGEXP '^[h]';
+-----------------------+
| 'hello' REGEXP '^[h]' |
+-----------------------+
|                     1 |
+-----------------------+
1 row in set (0.00 sec)

三、小结

本章介绍了正则表达式的基础知识,学习了如何在MySQL的SELECT语句中通过REGEXP关键字使用它们。

关键词作用示例
REGEXP表示通配符匹配SELECT 列名 FROM 表名 WHERE 列名 REGEXP 正则表达式;

总结 

到此这篇关于MySQL用正则表达式进行搜索功能的文章就介绍到这了,更多相关MySQL正则表达式搜索内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql 5.7.13 安装配置笔记(Mac os)

    mysql 5.7.13 安装配置笔记(Mac os)

    这篇文章主要为大家详细介绍了Mac os下mysql 5.7.13 安装配置方法教程,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • MySQL死锁原因、检测与解决方案(含详细图文)

    MySQL死锁原因、检测与解决方案(含详细图文)

    死锁是指两个或多个事务在执行过程中,因争夺锁资源而造成的一种相互等待的现象,若无外力干预,这些事务将永远无法继续执行,这篇文章主要介绍了MySQL死锁原因、检测与解决方案的相关资料,需要的朋友可以参考下
    2026-04-04
  • MySQL 索引结构、对比与操作实践详细攻略

    MySQL 索引结构、对比与操作实践详细攻略

    在MySQL数据库中索引是特殊的数据结构,它与表中数据关联,就像书籍的目录与正文的关系目录通过章节标题和页码快速定位内容,而索引则通过存储数据的关键列值及其对应物理位置,帮助数据库快速定位目标数据,本文介绍MySQL索引结构、对比与操作,感兴趣的朋友一起看看吧
    2025-10-10
  • mysql8报错:ERROR 1410 (42000): You are not allowed to create a user with GRANT解决办法

    mysql8报错:ERROR 1410 (42000): You are not allowed to 

    电脑新装的mysql,版本为8.0以上,分配权限时直接带密码和账号会报错,这篇文章主要给大家介绍了关于mysql8报错:ERROR 1410 (42000): You are not allowed to create a user with GRANT的解决办法,需要的朋友可以参考下
    2022-06-06
  • SQL实现LeetCode(175.联合两表)

    SQL实现LeetCode(175.联合两表)

    这篇文章主要介绍了SQL实现LeetCode(175.联合两表),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 如何设置mysql数据库只读权限用户及全部权限

    如何设置mysql数据库只读权限用户及全部权限

    MySQL数据库所有用户权限是指MySQL数据库中可以对数据库和表进行操作的权限,这篇文章主要介绍了如何设置mysql数据库只读权限用户及全部权限的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-11-11
  • 详解Windows Server 2012下安装MYSQL5.7.24的问题

    详解Windows Server 2012下安装MYSQL5.7.24的问题

    这篇文章主要介绍了Windows Server 2012下安装MYSQL5.7.24的详细过程,本文通过图文并茂实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • MySQL中使用自定义变量 编写偷懒的UNION示例

    MySQL中使用自定义变量 编写偷懒的UNION示例

    以下是对MySQL中使用自定义变量,编写一个UNION的示例进行了详细的介绍,需要的朋友可以过来参考下
    2013-07-07
  • MySQL性能优化之慢查询优化实战指南

    MySQL性能优化之慢查询优化实战指南

    这篇文章主要为大家详细介绍了MySQL如何进行慢查询优化,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以跟随小编一起学习一下
    2025-07-07
  • MySQ实现XA事务的具体使用

    MySQ实现XA事务的具体使用

    XA事务是一种分布式事务处理协议,本文主要介绍了MySQ实现XA事务的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07

最新评论