天天看点

MySQL使用正则表达式查询1、匹配指定字符中的任意一个2、使用“*”和“+”来匹配多个字符3、匹配以指定的字符开头和结束的记录

正则表达式是用某种模式去匹配一类字符串的一个方式。正则表达式的查询能力比通配字符的查询能力更强大,而且更加的灵活。

创建数据表tb_book(图书信息表),并添加相关数据,用于后续的示例使用。

-- 创建图书信息表
CREATE TABLE IF NOT EXISTS tb_book
(
	id INT AUTO_INCREMENT PRIMARY KEY,
	books VARCHAR(50) NOT NULL
) COMMENT = '图书信息表';
 
-- 插入图书信息数据
INSERT INTO tb_book(books) VALUES('pan_junbiao的博客'),('Java程序设计'),('深入Java编程')
,('Java Web从入门到精通'),('深入Java Web编程'),('深入理解Java虚拟机'),('Java并发编程')
,('MySQL数据库'),('深入SQL Server数据库'),('Oracle数据库'),('Oracle从入门到精通')
,('C#高级编程'),('PHP高级编程'),('Java多线程技术'),('pan_junbiao的CSDN博客');

-- 查询图书信息表数据
SELECT * FROM tb_book;
           

执行结果:

MySQL使用正则表达式查询1、匹配指定字符中的任意一个2、使用“*”和“+”来匹配多个字符3、匹配以指定的字符开头和结束的记录

在MySQL中,使用REGEXP关键字来匹配查询正则表达式。其基本形式如下:

字段名 REGEXP '匹配方式'
           

(1)字段名:表示需要查询的字段名称。

(2)匹配方式:表示一哪种方式来进行匹配查询。

正则表达式的模式字符:

模式字符 含义 应用举例
^ 匹配以特定字符或字符串开头的记录

使用“^”表达式查询已字母“Java”开头的记录,语句如下:

SELECT * FROM tb_book WHERE books REGEXP '^Java';

$ 匹配以特定字符或字符串结尾的记录

使用“$”表达式查询已“数据库”结尾的记录,语句如下:

SELECT * FROM tb_book WHERE books REGEXP '数据库$';

. 匹配字符串的任意一个字符,包括回车和换行符

使用“.”表达式查询包括“J”字符的记录,语句如下:

SELECT * FROM tb_book WHERE books REGEXP 'J.';

[字符集合] 匹配字符集合中的任意一个字符

使用“[]”表达式查询包含“MCQ”字符的记录,语句如下:

SELECT * FROM tb_book WHERE books REGEXP '[MCQ]';

[^字符集合] 匹配排除“字符集合”以外的任意一个字符串

查询排除包括c-z字母以外的记录,语句如下:

SELECT * FROM tb_book WHERE books REGEXP '[^c-z]';

S1|S2|S3 匹配S1、S2和S3中的任意一个字符串 查询包含“Java”、“C#”、“Oracle”字符中任意一个字符的记录,语句如下:SELECT * FROM tb_book WHERE books REGEXP 'JAVA|C#|ORACLE';
* 匹配多个该符号之前的字符,包括0和1个

使用“*”表达式查询“A”字符前面可能出现过J字符的记录,语句如下:

SELECT * FROM tb_book WHERE books REGEXP 'J*A';

+ 匹配多个该符号之前的字符,至少包括1个 使用“+”表达式查询“A”字符前面至少出现过一个“J”字符的记录,语句如下:SELECT * FROM tb_book WHERE books REGEXP 'J+A';
字符串{N} 匹配字符串出现N次

使用“{N}”表达式查询连续出现3次“a”字符的记录,语句如下:

SELECT * FROM tb_book WHERE books REGEXP 'a{3}';

字符串{M,N} 匹配字符串出现至少M次,最多N次 使用“{M,N}”表达式查询至少出现2次,最多出现4次“a”字符的记录,语句如下:SELECT * FROM tb_book WHERE books REGEXP 'a{2,4}';

注意:关于大小写的区分,MySQL中正则表达式匹配(从版本3.23.4后)不区分大小写。如果要区分大小写,应该使用BINARY关键字。

例如:使用“.”表达式查询包括大写“L”字符的记录,语句如下:

SELECT * FROM tb_book WHERE books REGEXP BINARY 'L.';
           

1、匹配指定字符中的任意一个

使用方括号([])可以将需要查询字符组成一个字符集。只要记录中包含方括号中的任意字符,该记录将会被查询出来。

示例:查询名称中包括a、b、c字母中任意一个的记录。

SELECT * FROM tb_book WHERE books REGEXP '[abc]';
           

执行结果:

MySQL使用正则表达式查询1、匹配指定字符中的任意一个2、使用“*”和“+”来匹配多个字符3、匹配以指定的字符开头和结束的记录

2、使用“*”和“+”来匹配多个字符

正则表达式中,“*”和“+”都可以匹配多个该符号之前的字符。但是,“+”至少表示一个字符,而“*”可以表示0个字符。

示例:使用“*”表达式查询“A”字符前面可能出现过J字符的记录。

SELECT * FROM tb_book WHERE books REGEXP 'J*A';
           

执行结果:

MySQL使用正则表达式查询1、匹配指定字符中的任意一个2、使用“*”和“+”来匹配多个字符3、匹配以指定的字符开头和结束的记录

结果说明:查询结果显示,“Oracle”记录中字母A之前并没有字母J。因为“*”可以表示0个,所以字母A前面有0个或者多个字母J出现。

示例:使用“+”表达式查询“A”字符前面至少出现过一个“J”字符的记录。

SELECT * FROM tb_book WHERE books REGEXP 'J+A';
           

执行结果:

MySQL使用正则表达式查询1、匹配指定字符中的任意一个2、使用“*”和“+”来匹配多个字符3、匹配以指定的字符开头和结束的记录

3、匹配以指定的字符开头和结束的记录

正则表达式中,^表示字符串的开始位置,$表示字符串的结束位置。

示例:查询以“pan”开头,以“博客”结尾的记录。

SELECT * FROM tb_book WHERE books REGEXP '^pan.+博客$';
           

执行结果:

MySQL使用正则表达式查询1、匹配指定字符中的任意一个2、使用“*”和“+”来匹配多个字符3、匹配以指定的字符开头和结束的记录