MySQL使用正则表达式查询,REGEXP 的使用

本文详细介绍SQL中正则表达式的应用,包括字符匹配、字符串重复匹配等技巧,并通过实例展示如何在数据库查询中有效利用正则表达式进行文本搜索。

 常用的字符匹配列表

选项说明例子匹配示例
^开始匹配‘^b’:匹配以b开始的字符串book,bit
$结束匹配'str$':匹配以str结尾的字符串astr,bstr
.匹配任意单个字符a.cabc,adc
*匹配0或多个字符*abc123abc,abc,1abc
+匹配1或多次abc+abc1
字符串匹配字符串文本‘abc’‘abcd’,'afabc'
[字符合集]匹配字符集合中任何一个字符'[ab]''abc','a','bbbb'
[^]匹配不在括号中的任何字符‘[^abc]’:匹配不包含,a\b\c的字符串‘123’,‘dd’
字符串{n,}匹配前面的字符串至少n次b{2}:匹配2个或者更多的bbbb,bbbb
字符串{n,m}匹配前面的字符串至少n次,至多m次b{2,4}:匹配b至少2,至多4bb,bbb,bbb

1、匹配以特定字符开头的文本

select * from student where name REGEXP '^张'

结果

2、查询一特定字符结尾

select * from student where name REGEXP '一$'

结果

3、使用.来匹配任意一个字符

select * from student where name REGEXP '.一';

4、使用*和+来匹配多个字符

select * from student where name REGEXP 'a+';

结果

5、匹配指定字符串

查询包含abc或者abb的字符串

select * from student where name REGEXP 'abc|abb';

结果

6、匹配指定字符串中的任意一个(试了下,对中文字符匹配结果很诡异,不建议匹配中文)

select * from student where name REGEXP '[ab]';

结果

匹配中文:李四不晓得为啥跑进来了

7、匹配指定意外的字符串

返回所有字符串不在a-z之间的结果
select * from student where name REGEXP '[^a-z]';

结果

8、使用{n,}或者{n,m}来指定字符串连续出现的次数

{n,}:匹配>=n

{n,m}:匹配  n<=  x <= m

SELECT * from student where name REGEXP 'a{2,}'

结果

SELECT * from student where name REGEXP 'b{2,4}'

结果

 

附上建表语句

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', '张一', '13');
INSERT INTO `student` VALUES ('2', '李四', '56');
INSERT INTO `student` VALUES ('3', '王五', '18');
INSERT INTO `student` VALUES ('4', '张三', '21');
INSERT INTO `student` VALUES ('5', 'abbbbc', '12');
INSERT INTO `student` VALUES ('6', 'aabc33', '12');

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值