暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL学习笔记 Chapter5:MySQL正则表达式

Yuan的学习笔记 2022-06-05
612



MySQL正则表达式

使用正则表达式明显是为了那些需要更复杂的控制数据过滤的时候。

基本字符匹配

REGEXP
看起来和LIKE
关键字很像,REGEXP
告诉MySQL,后面所跟的东西作为正则表达式处理。

NOTE:果被匹配的文本在列值中出现,LIKE
将不会找到它(除非使用通配符);REGEXP
如果找到被匹配的文本在列值内出现,就会返回这一行。

e.g.

下面的语句会检索所有包含文本'bear'的行。

输入

SELECT prod_name
FROM products
WHERE prod_name REGEXP 'bear'
ORDER BY prod_name;

复制

MySQL中的正则表达式不区分大小写,未区分大小写,可以使用BINARY
关键字

输入

SELECT prod_name
FROM products
WHERE prod_name REGEXP BINARY 'bear'
ORDER BY prod_name;

复制


OR匹配

搜索两个串之一,看下面例子就懂了。

e.g.

下面的语句找出所有包含bear或者doll的产品。正则表达式bear|doll,I为正则表达式的OR操作符,表示匹配其中之一。

输入

SELECT prod_name
FROM products
WHERE prod_name REGEXP 'bear|doll'
ORDER BY prod_name;

复制


匹配特定字符

如果我们只想匹配特定的字符,可以通过一组用[]
括起来的字符完成。

e.g.

正则表达式中的[28]
表示匹配2或8。

输入

SELECT prod_name
FROM products
WHERE prod_name REGEXP '1[28] inch'
ORDER BY prod_name;

复制


匹配范围

这个也很简单,就是用-
来定义一个范围。

e.g.

下面的[1-8]
表示匹配数字1到8。

输入

SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-8] inch'
ORDER BY prod_name;

复制


匹配特殊字符

匹配特殊字符,必须用\\
为前导。\\.
表示查找.,\\-
表示查找-

NOTE:

.
会匹配任意字符,因此所有行会显示出来,\\就像别的语言的转义

e.g.

下面的[1-8]表示匹配数字1到8。

输入

SELECT vend_name, vend_address
FROM vendors
WHERE vend_name REGEXP '\\.'
ORDER BY vend_name;

复制


匹配多个实例

之前的匹配都是单次出现,但有时我们需要对匹配的数目进行更强的控制,比如一个数字出现多少次,单词末尾是否带s(复数)

e.g.

[0-9]会匹配任意数字,bears?会匹配bear或bears,?
匹配它前面的任何字符出现0次或1次。

输入

SELECT prod_name
FROM products
WHERE prod_name REGEXP '1[0-9] inch teddy bears?'
ORDER BY prod_name;

复制

其他的重复元字符还有:

元字符说明
*0个或多个匹配
+1个或多个匹配
?0个或1个匹配
{n}指定数目的匹配
{n,}不少于指定数目的匹配
{n,m}匹配数目的范围(m不超过255)


定位符

之前的匹配都是本文的任意位置,使用定位符可以匹配特定位置的文本

e.g.

^r
会匹配文本开头为r或R的行。

输入

SELECT prod_name
FROM products
WHERE prod_name REGEXP '^r'
ORDER BY prod_name;

复制

更多定位元字符见下面表格

元字符说明
^文本的开始
$文本的结尾
[[:词的开始
[[:>:]]词的结尾

果然正则表达式在哪个语言都很麻烦啊,嗯,这篇就这样吧,BYE-BYE!!


-END-




往期回顾


SQL学习笔记 Chapter4:LIKE操作符进行过滤




文章转载自Yuan的学习笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论