文章目录
- Mysql正则表达式查询
- 1.语法
- 2.例子
- 2.1 查询 name 字段以j开头的记录
- 2.2 查询 name 字段以“y”结尾的记录
- 2.3 查询 name 字段值包含“a”和“y”,且两个字母之间只有一个字母的记录
- 2.4 查询 name 字段值包含字母“T”,且“T”后面出现字母“h”的记录
- 2.5 查询 name 字段值包含字母“T”,且“T”后面至少出现“h”一次的记录
- 2.6 查询 name 字段值包含字母“S”,且“S”后面出现“a”一次或零次的记录
- 2.7 查询 name 字段值包含字符串“an”的记录
- 2.8 查询 name 字段值包含字符串“an”或“en”的记录
- 2.9 查询 name 字段值包含字母“i”或“o”的记录
- 2.10 查询 name 字段值包含字母 a~t 以外的字符的记录
- 2.11 查询 name 字段值出现字母‘e’ 至少 2 次的记录
- 2.12 查询 name 字段值出现字符串“i” 最少 1 次,最多 3 次的记录
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 前面有任意个字符 f | fn、fan、faan、abcn |
| + | 匹配前面的字符 1 次或多次 | ‘ba+’ 匹配以 b 开头,后面至少紧跟一个 a | ba、bay、bare、battle |
| ? | 匹配前面的字符 0 次或1次 | ‘sa?’ 匹配0个或1个a字符 | sa、s |
| 字符串 | 匹配包含指定字符的文本 | ‘fa’ 匹配包含‘fa’的文本 | fan、afa、faad |
| [字符集合] | 匹配字符集合中的任何一个字符 | ‘[xz]’ 匹配 x 或者 z | dizzy、zebra、x-ray、extra |
| [^] | 匹配不在括号中的任何字符 | ‘[^abc]’ 匹配任何不包含 a、b 或 c 的字符串 | desk、fox、f8ke |
| 字符串{n,} | 匹配前面的字符串至少 n 次 | ‘b{2}’ 匹配 2 个或更多的 b | bbb、bbbb、bbbbbbb |
| 字符串 | |||
| {n,m} | 匹配前面的字符串至少 n 次, 至多 m 次 | ‘b{2,4}’ 匹配最少 2 个,最多 4 个 b | bbb、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, '男');
本文详细介绍了如何使用Mysql正则表达式进行复杂的查询操作,包括各种匹配模式和实例,如以特定字符开头或结尾的记录查询,以及如何匹配特定字符串或字符集。

1778

被折叠的 条评论
为什么被折叠?



