MariaDB 使用正则匹配查询

正则表达式通常被用来检索或替换那些符合某个模式的文本内容,根据指定的匹配模式匹配文本中符合要求的特殊字符串.例如从一个文本文件中提取电话号码,查找一篇文章中重复的单词或者替换用户输入的某些敏感词语等,这些地方都可以使用正则表达式,正则表达式强大且灵活,可以应用于非常复杂的查询,MySQL中使用REGEXP关键字指定正则表达式的字符匹配模式,先来看一下下表常用的正则规则吧:

通配符说明信息匹配例子
^匹配文本的开头字符'^b'匹配开头是b的字符串
$匹配文本的结束字符'st$'匹配结尾是st的字符
.匹配任意单个字符'b.t'匹配任意b和t之间有1个字符
*匹配0个或多个任意字符'f*n'匹配字符n前面任意个字符f
+匹配前面字符1次或多次'ba+'匹配以b开头后面紧跟至少1个a
[^]匹配不在括号中的任何字符'[^ab]'匹配开头不包括,a或b字幕的
<字符串>匹配包含指定字符串的文本'aaa'匹配字符串aaa
[字符集合]匹配字符集合中任意1个字符'[xz]'匹配x或者z
字符串{n,}匹配前面字符至少出现n次'b{2}'匹配2个或多个b
字符串{n,m}匹配前面字符至少出现n次不大于m次'b{2,3}'匹配最少2个,最多3个b

以上就是MariaDB所支持的所有匹配通配符,这里内容虽然较少,但是还是要独立出来一个章节,正则在数据的批量遍历中能起到至关重要的作用,应该认真掌握.

字符(^):匹配以特定字符或者字符串开头的文本

1.在lyshark表中,查询Name字段以字母b开头的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP '^b';

+-----+-----+------------+-------+
| Uid | Gid | Name       | Price |
+-----+-----+------------+-------+
| b1  | 101 | blackberry | 10.20 |
| b2  | 104 | berry      |  7.60 |
| t1  | 102 | bannana    | 10.30 |
+-----+-----+------------+-------+
3 rows in set (0.01 sec)

2.在lyshark表中,查询Name字段以字母be开头的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP '^be';

+-----+-----+-------+-------+
| Uid | Gid | Name  | Price |
+-----+-----+-------+-------+
| b2  | 104 | berry |  7.60 |
+-----+-----+-------+-------+
1 row in set (0.00 sec)

字符($):匹配以特定字符或者字符串结尾的文本

1.在lyshark表中,查询Name字段以字母y结尾的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP 'y$';

+-----+-----+------------+-------+
| Uid | Gid | Name       | Price |
+-----+-----+------------+-------+
| b1  | 101 | blackberry | 10.20 |
| b2  | 104 | berry      |  7.60 |
| c0  | 101 | cherry     |  3.20 |
| m2  | 105 | xbabay     |  2.60 |
+-----+-----+------------+-------+
4 rows in set (0.00 sec)

2.在lyshark表中,查询Name字段以字母bay结尾的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP 'bay$';

+-----+-----+--------+-------+
| Uid | Gid | Name   | Price |
+-----+-----+--------+-------+
| m2  | 105 | xbabay |  2.60 |
+-----+-----+--------+-------+
1 row in set (0.00 sec)

字符(.):匹配任意一个字符

1.在lyshark表中,查询Name字段值包含字母a与g且两个字母之间只有一个字母的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP 'a.g';

+-----+-----+--------+-------+
| Uid | Gid | Name   | Price |
+-----+-----+--------+-------+
| bs1 | 102 | orange | 11.20 |
| m1  | 106 | mango  | 15.70 |
+-----+-----+--------+-------+
2 rows in set (0.00 sec)

字符(*):匹配前面的字符任意多次,包括0次

1.在lyshark表中,查询Name字段以字母b开头并且b后面出现字母a的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP '^ba*';

+-----+-----+------------+-------+
| Uid | Gid | Name       | Price |
+-----+-----+------------+-------+
| b1  | 101 | blackberry | 10.20 |
| b2  | 104 | berry      |  7.60 |
| t1  | 102 | bannana    | 10.30 |
+-----+-----+------------+-------+
3 rows in set (0.00 sec)

字符(+):匹配前面的字符至少一次

1.在lyshark表中,查询Name字段以字母b开头,且b后面出现字母a至少一次的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP '^ba+';

+-----+-----+---------+-------+
| Uid | Gid | Name    | Price |
+-----+-----+---------+-------+
| t1  | 102 | bannana | 10.30 |
+-----+-----+---------+-------+
1 row in set (0.00 sec)

字符(|):匹配指定字符

1.在lyshark表中,查询Name字段包括字符串on的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP 'on';

+-----+-----+---------+-------+
| Uid | Gid | Name    | Price |
+-----+-----+---------+-------+
| bs2 | 105 | melon   |  8.20 |
| l2  | 104 | lemon   |  6.40 |
| o2  | 103 | coconut |  9.20 |
+-----+-----+---------+-------+
3 rows in set (0.00 sec)

2.在lyshark表中,查询Name字段包括字符串on或者ap的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP 'on|ap';

+-----+-----+---------+-------+
| Uid | Gid | Name    | Price |
+-----+-----+---------+-------+
| a1  | 101 | apple   |  5.20 |
| a2  | 103 | apricot |  2.20 |
| bs2 | 105 | melon   |  8.20 |
| l2  | 104 | lemon   |  6.40 |
| o2  | 103 | coconut |  9.20 |
| t2  | 102 | grape   |  5.30 |
+-----+-----+---------+-------+
6 rows in set (0.00 sec)

3.在lyshark表中,查询Name字段使用LIKE关键字匹配on的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name LIKE 'on';
Empty set (0.00 sec)

#结果匹配不到,这也是这两个匹配方法的不同之处.

字符([]):匹配指定字符中任意一个

1.在lyshark表中,查询Name字段包含字母o或者t的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP '[ot]';

+-----+-----+---------+-------+
| Uid | Gid | Name    | Price |
+-----+-----+---------+-------+
| a2  | 103 | apricot |  2.20 |
| bs1 | 102 | orange  | 11.20 |
| bs2 | 105 | melon   |  8.20 |
| l2  | 104 | lemon   |  6.40 |
| m1  | 106 | mango   | 15.70 |
| m3  | 105 | xxtt    | 11.60 |
| o2  | 103 | coconut |  9.20 |
+-----+-----+---------+-------+
7 rows in set (0.01 sec)

字符([^字符集]):匹配不在指定集合中的任何字符

1.在lyshark表中,查询Uid字段包含字母a-e和1-2以外字符的集合,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Uid REGEXP '[^a-e1-2]';

+---------+-----+----------+--------+
| Uid     | Gid | Name     | Price  |
+---------+-----+----------+--------+
| b5      | 107 | xxxx     |   3.60 |
| bs1     | 102 | orange   |  11.20 |
| bs2     | 105 | melon    |   8.20 |
| c0      | 101 | cherry   |   3.20 |
| l2      | 104 | lemon    |   6.40 |
| lyshark | 999 | lysharks | 999.00 |
| m1      | 106 | mango    |  15.70 |
| m2      | 105 | xbabay   |   2.60 |
| m3      | 105 | xxtt     |  11.60 |
| o2      | 103 | coconut  |   9.20 |
| t1      | 102 | bannana  |  10.30 |
| t2      | 102 | grape    |   5.30 |
| t4      | 107 | xbababa  |   3.60 |
+---------+-----+----------+--------+
13 rows in set (0.00 sec)

字符({n,}):匹配前一个字符至少匹配n次的

1.在lyshark表中,查询Name字段,匹配x字符至少出现2次的行,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP 'x{2,}';

+-----+-----+------+-------+
| Uid | Gid | Name | Price |
+-----+-----+------+-------+
| b5  | 107 | xxxx |  3.60 |
| m3  | 105 | xxtt | 11.60 |
+-----+-----+------+-------+
2 rows in set (0.00 sec)

字符({n,m}):匹配前一个字符至少匹配n次,且不大于m次的记录

1.在lyshark表中,查询Name字段,匹配ba字符至少出现2次且不大于3次的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP 'ba{1,3}';

+-----+-----+---------+-------+
| Uid | Gid | Name    | Price |
+-----+-----+---------+-------+
| m2  | 105 | xbabay  |  2.60 |
| t1  | 102 | bannana | 10.30 |
| t4  | 107 | xbababa |  3.60 |
+-----+-----+---------+-------+
3 rows in set (0.00 sec)
<think>好的,我需要解答用户关于`rpm -qa | grep mariadb`命令组合的作用和用途的问题。首先,我得回忆一下rpm和grep这两个命令的基本用法。 rpm是Red Hat及其衍生系统如CentOS中用来管理软件包的工具,`rpm -qa`是查询所有已安装的rpm包。而grep是一个文本搜索工具,用于过滤包含特定模式的行。所以组合起来,`rpm -qa | grep mariadb`的作用应该是列出所有已安装的与mariadb相关的包。 接下来,我需要结合用户提供的引用内容。引用[1]中提到,在CentOS 6上安装了MariaDB而不是MySQL,所以使用`rpm -qa | grep MariaDB`才能查到相关包,这说明如果用户安装的是MariaDB使用`grep mariadb`时需要注意大小写问题,可能因为大小写不匹配导致结果为空。因此,命令的正确使用可能需要考虑大小写敏感的情况,或者用户可能输入的是小写的mariadb,而实际包名是MariaDB,这时候需要调整grep的参数,比如使用`-i`选项来忽略大小写。 另外,引用[3]提到在Ubuntu中使用rpm命令可能无效,因为Ubuntu使用的是deb包管理,但用户的问题显然是在基于RPM的系统如CentOS中。所以需要强调这个命令适用于RPM系系统,而在Debian系中应使用dpkg或apt命令。 可能还需要解释为什么会有这样的情况:MariaDB作为MySQL的替代品,在有些系统中被默认安装,导致用户可能误以为安装了MySQL,但实际上安装的是MariaDB。这时候使用正确的查询命令就很重要。 最后,用户可能的问题还包括如何正确使用这个命令,比如是否需要通配符或者正则表达式,或者是否需要处理大小写。需要指出使用`grep -i`来忽略大小写,或者直接指定正确的大小写形式。 总结来说,回答需要分步骤解释命令的每个部分,说明其功能,并结合引用中的实例说明实际应用场景和可能遇到的问题,比如大小写敏感和系统环境差异。</think>`rpm -qa | grep mariadb` 是一个组合命令,用于在基于 RPM 包管理的 Linux 系统(如 CentOS、Fedora)中查询已安装的与 **MariaDB** 相关的软件包。具体功能及用途如下: --- ### **1. 命令分解** - **`rpm -qa`**: 表示列出系统中所有已安装的 RPM 软件包(`-q` 表示查询,`-a` 表示所有包)。 - **`|`**: 管道符,将前一个命令的输出作为后一个命令的输入。 - **`grep mariadb`**: 过滤包含关键词 "mariadb" 的行(默认区分大小写)。 --- ### **2. 典型用途** - **验证 MariaDB 是否安装** 若输出结果包含类似 `MariaDB-server-5.5.68-1.el6.x86_64` 的包名,则表明 MariaDB 已安装[^1]。 - **定位具体版本** 通过包名中的版本号(如 `5.5.68`)确认安装的 MariaDB 版本。 - **排查依赖问题** 检查 MariaDB 相关组件(如客户端、开发库)是否完整安装。 --- ### **3. 注意事项** - **大小写敏感** 若包名实际为 `MariaDB`(首字母大写),使用 `grep mariadb`(全小写)可能无结果,需改用 `grep -i mariadb` 忽略大小写[^1]。 - **系统兼容性** RPM 命令仅适用于 Red Hat 系系统(如 CentOS)。在 Debian 系系统(如 Ubuntu)中应使用 `dpkg -l | grep mariadb`[^3]。 - **MariaDBMySQL 的替代关系** 某些系统中(如 CentOS 7+),默认用 MariaDB 替代 MySQL,因此需通过此命令确认实际安装的数据库类型。 --- ### **示例输出** ```bash $ rpm -qa | grep -i mariadb MariaDB-server-10.5.9-1.el7.x86_64 MariaDB-client-10.5.9-1.el7.x86_64 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山月照空舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值