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 update会锁定哪些范围的数据

    浅谈MySql update会锁定哪些范围的数据

    本文主要介绍了记录一下MySql update会锁定哪些范围的数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • mysqldump加-w参数备份数据时需要注意的事项

    mysqldump加-w参数备份数据时需要注意的事项

    这篇文章主要介绍了mysqldump加-w参数备份数据时需要注意的事项,需要的朋友可以参考下
    2014-06-06
  • MySQL查询不区分大小写的两种解决方式

    MySQL查询不区分大小写的两种解决方式

    偶然机会,发现一次查询匹配数据的时候没有区分大小写,如,username = ‘WangWu’,username = 'wangwu’的记录也被查出来,本文介绍解决这种情况的两种方式,并通过代码讲解的非常详细,需要的朋友可以参考下
    2025-01-01
  • MySQL定位长事务(Identify Long Transactions)的实现

    MySQL定位长事务(Identify Long Transactions)的实现

    在MySQL的运行中,经常会遇到一些长事务,本文主要介绍了MySQL定位长事务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • Mysql中索引和约束的示例语句

    Mysql中索引和约束的示例语句

    这篇文章主要介绍了Mysql中索引和约束的相关资料,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下
    2021-01-01
  • 线上MySQL的自增id用尽怎么办

    线上MySQL的自增id用尽怎么办

    MySQL的自增id都定义了初始值,然后不断加步长。虽然自然数没有上限,但定义了表示这个数的字节长度,那自增id用完,会怎么样?本文就来介绍一下
    2021-08-08
  • PhpMyAdmin 配置文件现在需要一个短语密码的解决方法

    PhpMyAdmin 配置文件现在需要一个短语密码的解决方法

    本文主要介绍PhpMyAdmin 配置文件现在需要一个短语密码的解决方法,比较实用,希望能给大家做一个参考。
    2016-06-06
  • MySQL下高可用故障转移方案MHA的超级部署教程

    MySQL下高可用故障转移方案MHA的超级部署教程

    这篇文章主要介绍了MySQL下高可用故障切换方案MHA的超级部署教程,文中队MHA方案的一些特点做了介绍,示例基于Linux系统的服务器环境,需要的朋友可以参考下
    2015-12-12
  • mysql5.7及mysql 8.0版本修改root密码的方法小结

    mysql5.7及mysql 8.0版本修改root密码的方法小结

    这篇文章主要介绍了mysql5.7及mysql 8.0版本修改root密码方式 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • 教你为MySQL数据库换挡加速

    教你为MySQL数据库换挡加速

    如果你是个赛车手,并且按一下按钮就能够立即更换引擎而不需要把车开到车库里去换,那会是什么感觉呢?MySQL数据库为开发人员所做的就好像是按按钮换引擎;它让你选择数据库引擎,并给你一条简单的途径来切换它。
    2010-02-02

最新评论