Mysql正则表达式查询(含完整例子)

本文详细介绍了如何使用Mysql正则表达式进行复杂的查询操作,包括各种匹配模式和实例,如以特定字符开头或结尾的记录查询,以及如何匹配特定字符串或字符集。

Mysql正则表达式查询

1.语法
属性名 REGEXP '匹配方式'

   其中,“属性名”表示需要查询的字段名称;“匹配方式”表示以哪种方式来匹配查询。“匹配方式”中有很多的模式匹配字符,它们分别表示不同的意思。下表列出了 REGEXP 操作符中常用的匹配方式。

选项说明例子匹配值示例
^匹配文本的开始字符‘^b’ 匹配以字母 b 开头的字符串book、big、banana、bike
$匹配文本的结束字符‘st$’ 匹配以 st 结尾的字符串test、resist、persist
.匹配任何单个字符‘b.t’ 匹配任何 b 和 t 之间有一个字符bit、bat、but、bite
*匹配前面的字符 0 次或多次‘f*n’ 匹配字符 n 前面有任意个字符 ffn、fan、faan、abcn
+匹配前面的字符 1 次或多次‘ba+’ 匹配以 b 开头,后面至少紧跟一个 aba、bay、bare、battle
?匹配前面的字符 0 次或1次‘sa?’ 匹配0个或1个a字符sa、s
字符串匹配包含指定字符的文本‘fa’ 匹配包含‘fa’的文本fan、afa、faad
[字符集合]匹配字符集合中的任何一个字符‘[xz]’ 匹配 x 或者 zdizzy、zebra、x-ray、extra
[^]匹配不在括号中的任何字符‘[^abc]’ 匹配任何不包含 a、b 或 c 的字符串desk、fox、f8ke
字符串{n,}匹配前面的字符串至少 n 次‘b{2}’ 匹配 2 个或更多的 bbbb、bbbb、bbbbbbb
字符串
{n,m}匹配前面的字符串至少 n 次, 至多 m 次‘b{2,4}’ 匹配最少 2 个,最多 4 个 bbbb、bbbb
2.例子
2.1 查询 name 字段以j开头的记录
select * from person where name REGEXP '^j'

在这里插入图片描述

2.2 查询 name 字段以“y”结尾的记录
select * from person where name REGEXP 'y$'

在这里插入图片描述

2.3 查询 name 字段值包含“a”和“y”,且两个字母之间只有一个字母的记录
select * from person where name REGEXP 'a.y'

在这里插入图片描述

2.4 查询 name 字段值包含字母“T”,且“T”后面出现字母“h”的记录
select * from person where name REGEXP 'Th*'

在这里插入图片描述

2.5 查询 name 字段值包含字母“T”,且“T”后面至少出现“h”一次的记录
select * from person where name REGEXP 'Th+'

在这里插入图片描述

2.6 查询 name 字段值包含字母“S”,且“S”后面出现“a”一次或零次的记录
select * from person where name REGEXP  'sa?'

在这里插入图片描述

2.7 查询 name 字段值包含字符串“an”的记录
select * from person where name REGEXP 'an'

在这里插入图片描述

2.8 查询 name 字段值包含字符串“an”或“en”的记录

   指定多个字符串时,需要用|隔开。只要匹配这些字符串中的任意一个即可。

select * from person where name REGEXP 'an|en'

在这里插入图片描述

2.9 查询 name 字段值包含字母“i”或“o”的记录
select * from person where name REGEXP '[io]'

在这里插入图片描述
   方括号[ ]还可以指定集合的区间。例如,“[a-z]”表示从 a~z 的所有字母;“[0-9]”表示从 0~9 的所有数字;“[a-z0-9]”表示包含所有的小写字母和数字;“[a-zA-Z]”表示匹配所有字符。MySQL中的正则表达式匹配不区分大小写。为区分大小写,可使用BINARY关键字。

select * from person where name REGEXP BINARY   '^[a-z]'

在这里插入图片描述

2.10 查询 name 字段值包含字母 a~t 以外的字符的记录
select * from person where name REGEXP   '[^a-t]'

在这里插入图片描述

2.11 查询 name 字段值出现字母‘e’ 至少 2 次的记录
select * from person where name REGEXP  'e{2,}'

在这里插入图片描述

2.12 查询 name 字段值出现字符串“i” 最少 1 次,最多 3 次的记录
select * from person where name REGEXP  'i{1,3}'

在这里插入图片描述

   所需表和数据:


DROP TABLE IF EXISTS `person`;
CREATE TABLE `person`  (
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(40) NULL DEFAULT NULL,
  `heigh` int(40) NULL DEFAULT NULL,
  `sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;


INSERT INTO `person` VALUES ('Thomas ', 25, 168, '男');
INSERT INTO `person` VALUES ('Tom ', 20, 172, '男');
INSERT INTO `person` VALUES ('Dany', 29, 175, '男');
INSERT INTO `person` VALUES ('Jane', 27, 171, '男');
INSERT INTO `person` VALUES ('Susan', 24, 173, '女');
INSERT INTO `person` VALUES ('Green', 25, 168, '女');
INSERT INTO `person` VALUES ('Henry', 21, 160, '女');
INSERT INTO `person` VALUES ('Lily', 18, 190, '男');
INSERT INTO `person` VALUES ('LiMing', 19, 187, '男');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值