MySQL 保姆级教程(七):用正则表达式进行搜索

2024-06-17 22:20

本文主要是介绍MySQL 保姆级教程(七):用正则表达式进行搜索,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第 9 章 用正则表达式进行搜索

9.1 正则表达式介绍

正则表达式是用来匹配文本的特殊的串(字符集合)

9.2 使用 MySQL 正则表达式

MySQL 用WHERE 子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤 SELECT 检索出的数据

9.2.1 基本字符匹配

输入: SELECT help_category_id,help_category.name FROM help_category WHERE help_category.name LIKE 'MBR';
输出: 
+------------------+------+
| help_category_id | name |
+------------------+------+
|                8 | MBR  |
+------------------+------+
​
输入: SELECT help_category_id,help_category.name FROM help_category WHERE help_category.name REGEXP 'MBR';
输出: 
+------------------+---------------+
| help_category_id | name          |
+------------------+---------------+
|                8 | MBR           |
|               32 | MBR Functions |
+------------------+---------------+
分析: LIKE: 1. 适用于简单的模糊匹配,但功能相对较弱2. 在某些情况下,对于简单模式可能比较高效3. 使用通配符 % 和 _REGEXP: 1. 支持更强大的正则表达式,可以实现更复杂的匹配规则2. 对于复杂的正则表达式,可能会比 LIKE 更消耗计算资源3. 使用正则表达式语法输入: SELECT server_cost.cost_name,server_cost.last_update FROM server_cost WHERE server_cost.cost_name REGEXP '.row';
输出: 
+---------------------------+---------------------+
| cost_name                 | last_update         |
+---------------------------+---------------------+
| disk_temptable_row_cost   | 2024-01-03 15:22:15 |
| memory_temptable_row_cost | 2024-01-03 15:22:15 |
+---------------------------+---------------------+
分析: 这里使用了正则表达式 .row,'.' 是正则表达式中的一个特殊字符,它表示匹配任意字符

9.2.2 进行 OR 匹配

输入: SELECT help_category_id,help_category.name FROM help_category WHERE help_category.name REGEXP 'MBR|XML';
输出: 
+------------------+---------------+
| help_category_id | name          |
+------------------+---------------+
|                8 | MBR           |
|               32 | MBR Functions |
|               17 | XML           |
+------------------+---------------+
分析: 语句中使用了正则表达式 MBR|XML,表示匹配其中之一,因此都匹配返回。以下是 LIKE 的对比
​
输入: SELECT help_category_id,help_category.name FROM help_category WHERE help_category.name LIKE 'MBR' OR help_category.name LIKE 'XML';
输出: 
+------------------+------+
| help_category_id | name |
+------------------+------+
|                8 | MBR  |
|               17 | XML  |
+------------------+------+

9.2.3 匹配几个字符之一

输入: SELECT server_cost.cost_name,server_cost.last_update FROM server_cost WHERE server_cost.cost_name REGEXP 'e[vmp]'
输出: 
+------------------------------+---------------------+
| cost_name                    | last_update         |
+------------------------------+---------------------+
| disk_temptable_create_cost   | 2024-01-03 15:22:15 |
| disk_temptable_row_cost      | 2024-01-03 15:22:15 |
| memory_temptable_create_cost | 2024-01-03 15:22:15 |
| memory_temptable_row_cost    | 2024-01-03 15:22:15 |
| row_evaluate_cost            | 2024-01-03 15:22:15 |
+------------------------------+---------------------+
分析: 这里使用了正则表达式 'e[vmp]',[vm] 定义一组字符,它的意思是匹配 v 或 m 或 p,因此返回 ev 和 em(没有匹配到 ep)

9.2.4 匹配范围

输入: SELECT help_category_id,help_category.name FROM help_category WHERE help_category_id REGEXP '[1-2]' ORDER BY help_category_id;
输出: 
+------------------+-------------------------------+
| help_category_id | name                          |
+------------------+-------------------------------+
|                1 | Help Metadata                 |
|                2 | Data Types                    |
|               10 | Comparison Operators          |
|               11 | Logical Operators             |
|               12 | Flow Control Functions        |
|               13 | Numeric Functions             |
|               14 | Date and Time Functions       |
|               15 | String Functions              |
|               16 | Cast Functions and Operators  |
|               17 | XML                           |
|               18 | Bit Functions                 |
|               19 | Encryption Functions          |
|               20 | Locking Functions             |
|               21 | Information Functions         |
|               22 | Spatial Functions             |
|               23 | WKT Functions                 |
|               24 | WKB Functions                 |
|               25 | Geometry Constructors         |
|               26 | Geometry Property Functions   |
|               27 | Point Property Functions      |
|               28 | LineString Property Functions |
|               29 | Polygon Property Functions    |
|               31 | Geometry Relation Functions   |
|               32 | MBR Functions                 |
|               41 | Data Manipulation             |
|               42 | Transactions                  |
|               51 | Utility                       |
|               52 | Storage Engines               |
+------------------+-------------------------------+
分析: 这里使用正则表达式 [1-2],定义了一个范围

9.2.5 匹配特殊字符

输入: SELECT database_name,table_name,stat_name FROM innodb_index_stats WHERE stat_name REGEXP '.';
输出: 
+---------------+------------+--------------+
| database_name | table_name | stat_name    |
+---------------+------------+--------------+
| mysql         | component  | n_diff_pfx01 |
| mysql         | component  | n_leaf_pages |
| mysql         | component  | size         |
| sys           | sys_config | n_diff_pfx01 |
| sys           | sys_config | n_leaf_pages |
| sys           | sys_config | size         |
+---------------+------------+--------------+
分析: 因为 . 匹配任意字符,所有每个行逗号被检索出来
​
输入: SELECT database_name,table_name,stat_name FROM innodb_index_stats WHERE stat_name REGEXP '\\.';
输出: Empty set (0.01 sec)
分析: 为了匹配特殊字符必须使用 \\ 为前导
​
元字符         说明
\\f           换页
\\n           换行
\\r           回车
\\t           制表
\\v           纵向制表

9.2.6 匹配字符类

类                   说明
[:alnum:]             任意字母和数字
[:alpha:]             任意字符
[:blank:]             空格和制表
[:cntrl:]             ASCII 控制字符
[:digit:]             任意数字
[:graph:]             与 [:print:] 相同,但不包括空格
[:lower:]             任意小写字母
[:print:]             任意可打印字符
[:punct:]             既不在 [:alnum:] 又不在 [:cntrl:] 中的任意字符
[:space:]             包括空格在内的任意空白字符
[:upper:]             任意大写字母
[:xdigit:]            任意十六进制数字
​
输入: SELECT database_name,table_name,stat_name FROM innodb_index_stats WHERE stat_name REGEXP '[:alnum:]';
输出: 
+---------------+------------+--------------+
| database_name | table_name | stat_name    |
+---------------+------------+--------------+
| mysql         | component  | n_diff_pfx01 |
| mysql         | component  | n_leaf_pages |
| mysql         | component  | size         |
| sys           | sys_config | n_diff_pfx01 |
| sys           | sys_config | n_leaf_pages |
| sys           | sys_config | size         |
+---------------+------------+--------------+

9.2.7 匹配多个实例

元字符         说明
*             0 个或多个匹配
+             1 个或多个匹配
?             0 个或 1 个匹配
{n}           指定数目的匹配
{n,}          不少于指定数目的匹配
{n,m}         匹配数目的范围( m 不超过 255 )
​
输入: SELECT help_topic_id FROM help_relation WHERE help_topic_id REGEXP '[[:digit:]]{4}' ORDER BY help_topic_id;
输出: Empty set (0.01 sec)
分析: [:digit:] 匹配任意数字,{4} 确切要求它前面的字符出现 4 次,所以连在一起的任意 4 位数字
​
输入: SELECT help_topic_id,help_topic.name FROM help_topic WHERE help_topic.name REGEXP 'HELP\\_?' ORDER BY help_topic_id;
输出: 
+---------------+----------------+
| help_topic_id | name           |
+---------------+----------------+
|             0 | HELP_DATE      |
|             1 | HELP_VERSION   |
|             3 | HELP COMMAND   |
|           697 | HELP STATEMENT |
+---------------+----------------+
分析: \\ 转义字符 _ , ? 指示前面字符可出现 0 次 或者 1 次 

9.2.8 定位符

元字符         说明
^             文本的开始
$             文本的结尾
[[:<:]]       词的开始
[[:>:]]       词的结尾
​
输入: SELECT help_category_id,help_category.name FROM help_category WHERE help_category.name REGEXP 'MBR';
输出: 
+------------------+---------------+
| help_category_id | name          |
+------------------+---------------+
|                8 | MBR           |
|               32 | MBR Functions |
+------------------+---------------+
​
输入: SELECT help_category_id,help_category.name FROM help_category WHERE help_category.name REGEXP '^MBR$';
输出: 
+------------------+------+
| help_category_id | name |
+------------------+------+
|                8 | MBR  |
+------------------+------+
分析: 利用 ^ 开头 $ 结尾定位

这篇关于MySQL 保姆级教程(七):用正则表达式进行搜索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1070602

相关文章

mysql索引四(组合索引)

单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引;组合索引,即一个索引包含多个列。 因为有事,下面内容全部转自:https://www.cnblogs.com/farmer-cabbage/p/5793589.html 为了形象地对比单列索引和组合索引,为表添加多个字段:    CREATE TABLE mytable( ID INT NOT NULL, use

mysql索引三(全文索引)

前面分别介绍了mysql索引一(普通索引)、mysql索引二(唯一索引)。 本文学习mysql全文索引。 全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。 在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(

mysql索引二(唯一索引)

前文中介绍了MySQL中普通索引用法,和没有索引的区别。mysql索引一(普通索引) 下面学习一下唯一索引。 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE,把它定义为一个唯一索引。 添加数据库唯一索引的几种

mysql索引一(普通索引)

mysql的索引分为两大类,聚簇索引、非聚簇索引。聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引则不同。聚簇索引能够提高多行检索的速度、非聚簇索引则对单行检索的速度很快。         在这两大类的索引类型下,还可以降索引分为4个小类型:         1,普通索引:最基本的索引,没有任何限制,是我们经常使用到的索引。         2,唯一索引:与普通索引

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

SQL Server中,always on服务器的相关操作

在SQL Server中,建立了always on服务,可用于数据库的同步备份,当数据库出现问题后,always on服务会自动切换主从服务器。 例如192.168.1.10为主服务器,12为从服务器,当主服务器出现问题后,always on自动将主服务器切换为12,保证数据库正常访问。 对于always on服务器有如下操作: 1、切换主从服务器:假如需要手动切换主从服务器时(如果两个服务

SQL Server中,isnull()函数以及null的用法

SQL Serve中的isnull()函数:          isnull(value1,value2)         1、value1与value2的数据类型必须一致。         2、如果value1的值不为null,结果返回value1。         3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。        如