文章目录

  • 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'

mysql正则表达式提取json mysql正则表达式提取_正则表达式

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

mysql正则表达式提取json mysql正则表达式提取_正则表达式_02

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

mysql正则表达式提取json mysql正则表达式提取_正则表达式_03

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

mysql正则表达式提取json mysql正则表达式提取_mysql正则表达式提取json_04

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

mysql正则表达式提取json mysql正则表达式提取_mysql正则表达式提取json_05

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

mysql正则表达式提取json mysql正则表达式提取_mysql正则表达式提取json_06

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

mysql正则表达式提取json mysql正则表达式提取_mysql正则表达式提取json_07

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

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

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

mysql正则表达式提取json mysql正则表达式提取_字符串_08

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

mysql正则表达式提取json mysql正则表达式提取_正则表达式_09


   方括号[ ]还可以指定集合的区间。例如,“[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]'

mysql正则表达式提取json mysql正则表达式提取_mysql正则表达式提取json_10

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

mysql正则表达式提取json mysql正则表达式提取_字段_11

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

mysql正则表达式提取json mysql正则表达式提取_mysql正则表达式提取json_12

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

mysql正则表达式提取json mysql正则表达式提取_正则表达式_13

   所需表和数据:

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, '男');