常用的字符匹配列表
| 选项 | 说明 | 例子 | 匹配示例 |
| ^ | 开始匹配 | ‘^b’:匹配以b开始的字符串 | book,bit |
| $ | 结束匹配 | 'str$':匹配以str结尾的字符串 | astr,bstr |
| . | 匹配任意单个字符 | a.c | abc,adc |
| * | 匹配0或多个字符 | *abc | 123abc,abc,1abc |
| + | 匹配1或多次 | abc+ | abc1 |
| 字符串 | 匹配字符串文本 | ‘abc’ | ‘abcd’,'afabc' |
| [字符合集] | 匹配字符集合中任何一个字符 | '[ab]' | 'abc','a','bbbb' |
| [^] | 匹配不在括号中的任何字符 | ‘[^abc]’:匹配不包含,a\b\c的字符串 | ‘123’,‘dd’ |
| 字符串{n,} | 匹配前面的字符串至少n次 | b{2}:匹配2个或者更多的b | bbb,bbbb |
| 字符串{n,m} | 匹配前面的字符串至少n次,至多m次 | b{2,4}:匹配b至少2,至多4 | bb,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');
本文详细介绍SQL中正则表达式的应用,包括字符匹配、字符串重复匹配等技巧,并通过实例展示如何在数据库查询中有效利用正则表达式进行文本搜索。
2188

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



