MySQL使用正则表达式查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pan_junbiao/article/details/86062487

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

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

CREATE TABLE tb_book
(
	id INT AUTO_INCREMENT PRIMARY KEY,
	books VARCHAR(30) NOT NULL
);

INSERT INTO tb_book(books) VALUES('Java程序设计')
,('深入Java编程'),('MySQL数据库'),('深入SQL Server数据库')
,('C#高级编程'),('Oracle数据库');

在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]';

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

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

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

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

执行结果:

Java程序设计
深入Java编程
Oracle数据库

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

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

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

执行结果:

Java程序设计
深入Java编程

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

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

示例:查询以“My”开头,以“数据库”结尾的记录。

SELECT * FROM tb_book WHERE books REGEXP '^My.+数据库$';

执行结果:

MySQL数据库

猜你喜欢

转载自blog.csdn.net/pan_junbiao/article/details/86062487