SQL语句之正则表达式

SQL语句之正则表达式

文章目录

前言

一、正则表达式特殊的字符

二、正则表达式的使用介绍

2.1: 以特定字符串开头的记录
2.2: 以特定字符串结尾的记录
2.3: 包含指定字符串的记录
2.4: 以“.”代替字符串中的任意一个字符的记录
2.5: 匹配包含或者关系的记录
2.6: “*”匹配前面字符的任意多次
2.7: "+”匹配前面字符至少一次
2.8: 匹配指定字符集中的任意一个

前言

MySQL 正则表达式通常是在检索数据库记录的时候,根据指定的匹配模式匹配记录中符合要求的特殊字符串。

MySQL 的正则表达式使用 REGEXP 这个关键字来指定正则表达式的匹配模式,REGEXP 操作符所支持的匹配模式

一、正则表达式特殊的字符

匹配模式描述实例
^匹配文本的开始字符‘^te’ 匹配一te开头的字符串
$匹配文本的结束字符‘xt$’ 匹配以xt结尾的字符串
.匹配任何单个字符‘t.x’ 匹配任何t和x之间有一个字符的字符串
*匹配零个或多个在它面前的字符‘t*t’ 匹配t前面有任意个t
+匹配前面的字符1次或者多次‘’
字符串匹配包含指定的字符串‘te’ 匹配含有te的字符串
p1|p2匹配P1或P2‘te|xt’ 匹配te或者xt
[…]匹配字符集合中的任意一个字符‘[abc]’ 匹配a或者b或者c
[^…]匹配不在括号中的任何字符[^ab] 匹配不包含a或者b的字符串
{n}匹配前面的字符串n次‘g{2}’ 匹配含有2个g的字符串
{n,m}匹配前面的字符串至少n次,至多m次‘f{1,3}’ 匹配f最少1次,最多3次

二、正则表达式的使用介绍

了解正则表达式的匹配规则之后,就可以将这些规则技巧应用于 SQL 语句中,从而可以更准确、更快速的查出所需的记录。
下面通过示例的方式详细介绍 MySQL 正则表达式的使用方法。

2.1: 以特定字符串开头的记录
  • 例如,在player表中查询以us开头的name字段并打印对应的id、name 和 level 记录
mysql> select id,name,level from player where name REGEXP '^us';
+-----+---------+-------+
| id  | name    | level |
+-----+---------+-------+
| 448 | useless |     1 |
+-----+---------+-------+
1 row in set (0.00 sec)
2.2: 以特定字符串结尾的记录
  • 例如,在 player 表中查询以 ss 结尾的 name 字段并打印对应的 id、name 和 level 记录,具体操作如下所示。
mysql> select id,name,level from player where name REGEXP 'ss$' ;
+-----+---------+-------+
| id  | name    | level |
+-----+---------+-------+
| 448 | useless |     1 |
| 713 | guess   |    25 |
+-----+---------+-------+
2 rows in set (0.00 sec)
2.3: 包含指定字符串的记录
  • 例如,在player表中查询包含ok字符串的name字段并打印对应的 id、name 和 level
mysql> select id,name,level from player where name REGEXP 'ok';
+-----+--------+-------+
| id  | name   | level |
+-----+--------+-------+
| 795 | senoku |    15 |
+-----+--------+-------+
1 row in set (0.00 sec)
2.4: 以“.”代替字符串中的任意一个字符的记录
  • 例如,在player表中查询包含字符串shir 与 ey,且两个字符串之间只有一个字符的name 字段并打印对应的 id、name 和 level 记录.
mysql> select id,name,level from player where name REGEXP 'shir.ey';
+------+---------+-------+
| id   | name    | level |
+------+---------+-------+
| 2460 | shirley |     1 |
+------+---------+-------+
1 row in set (0.00 sec)
2.5: 匹配包含或者关系的记录
  • 例如,在 player 表中查询包含字符串ok或者ss的name字段并打印对应的 id、name
mysql> select id,name,level from player where name REGEXP 'ok|ss';
+-----+---------+-------+
| id  | name    | level |
+-----+---------+-------+
| 448 | useless |     1 |
| 713 | guess   |    25 |
| 795 | senoku  |    15 |
+-----+---------+-------+
3 rows in set (0.01 sec)
2.6: “*”匹配前面字符的任意多次
  • 例如,在 player 表中查询包含三个或者更多个连续的 o 的 name 字段并打印对应的 id、name 和 level 记录,具体操作如下所示。
mysql> select id,name,level from player where name REGEXP 'oooo*';
+------+--------+-------+
| id   | name   | level |
+------+--------+-------+
| 1735 | oooooo |     1 |
| 2718 | ooo    |     1 |
+------+--------+-------+
2 rows in set (0.00 sec)
2.7: "+”匹配前面字符至少一次
  • 例如,在player表中查询包含四个或者更多个o的 name 字段并打印对应的 id、name
mysql> select id,name,level from player where name REGEXP 'oooo+';
+------+--------+-------+
| id   | name   | level |
+------+--------+-------+
| 1735 | oooooo |     1 |
+------+--------+-------+
1 row in set (0.00 sec)
2.8: 匹配指定字符集中的任意一个
  • 例如,在 player 表中查询包含以 d、e、f 开头的 name 字段并打印对应的 id、name 和
    level 记录,具体操作如下所示。
mysql> select id,name,level from player where name REGEXP '^[d-f]';
+-----+----------------------+-------+
| id  | name                 | level |
+-----+----------------------+-------+
| 199 | D 丶狙击王           |    46 |
| 272 | D 丶抢人头辅助       |    45 |
+-----+----------------------+-------+
2 rows in set (0.00 sec)
  • 6
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值