开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情
一、前言
大家好,今天文章的内容是:
- 【用正则表达式进行搜索】
二、内容
2.1、什么是正则表达式?
正则表示式是用于匹配文本的特殊的串(字符集合)
正则表达式用于匹配文本,将一个模式与一个文本串进行比较。为了更好地进行数据过滤,我们可以在WHERE子句中使用正则表达式来过滤SELECT检索出的数据。
2.2、REGEXP 操作符
在MySQL中,我们使用REGEXP操作符来进行正则表达式匹配。
与LIKE操作符一样,REGEXP操作符也有类似的搜索模式,称为正则模式,下面记录MySQL中常用的正则模式。
(1).
.是正则表达式语言中的一个特殊字符,用于匹配任意一个字符(除\n之外)。
(2)|
|操作符用于匹配指定串的其中之一,含义类似于OR,比如a1|a2|a3正则模式用于匹配a1或a2或a3。
(3)[···]
我们可以使用字符集合来匹配其中包含的任意一个字符,即匹配特定的字符。
所谓字符集合,就是可以通过一组[和]来将指定匹配的字符括起来,用于表示括号内的字符只要匹配任意一个即可,效果也类似于OR语句。比如正则模式[123]相当于1|2|3,意思是匹配1或2或3。
(4)[^...]
如果在字符集合的开始位置放置一个字符^,效果则会完全相反,即否定一个字符集。
比如正则模式[123]表示匹配字符1、2或3,而[^123]则表示匹配这些字符之外的任何字符。
(5)-
集合可以用来定义要匹配的一个或多个字符,也就是指定匹配范围,而这里需要一个操作符-来定义一个范围。
比如正则模式[0123456789]用于匹配数字0到9中的任意一个字符,那么可以用[0-9]来代替,效果是一样的。
备注:
- 指定匹配范围不一定是数值,也可以是字母,比如
[a-z]表示匹配任意一个字母。
(6)\
为了匹配像.、-以及|等具有特殊含义的字符时,我们会使用所谓的转义(escaping),即使用\\作为前导。
比如:
\\.用于查找字符.\\-用于查找字符-\\|用于查找字符|\\\用于查找字符\
另外,\\也可以用来引用元字符,即具有特殊含义的字符。如下所示:
\\n:换行\\f:换页\\r:回车\\t:制表\\v:纵向制表
2.3、character class
在 MySQL 中,可以使用字符类(character class)来匹配一些预定义好了的字符集。
具体记录如下;
[:alnum:]:任意字母和数字(同[a-zA-Z0-9])[:alpha:]:任意字母(同[a-zA-Z])[:digit:]:任意数字(同[0-9])[:xdigit:]:任意十六进制数字(同[a-fA-F0-9])[:lower:]:任意小写字母(同[a-z])[:upper:]:任意大写字母(同[A-Z])[:blank:]:空格和制表(同[\\t])[:print:]:任意可打印字符[:graph:]:与[:print:]相同,但不包括空格。[:cntrl:]:ASCII 控制字符(ASCII 0到31和127)[:punct:]:既不在[:alnum:]也不在[:cntrl:]中的任意字符。
2.4、重复元字符
上述所记录的正则模式都是单次匹配,如果存在一个匹配,则该行会被检索到。
但是,我们可以利用重复元字符来实现多个实例的匹配,即可以对匹配的数目进行更强的控制。
下面是重复元字符的记录:
{n}:指定数目n的匹配,即匹配确定的n次。{n,}:不少于指定数目n的匹配。{n,m}:匹配数目的范围,即最少匹配n次且最多匹配m次。?:0个或1个匹配(同{0,1})*:0个或多个匹配(同{0,})+:1个或多个匹配(同{1,})
2.5、定位符
我们可以使用定位符来匹配特定位置的文本。
记录如下;
^:匹配文本的开始位置。$:匹配文本的结束位置。[[:<:]]:匹配词的结束位置。[[:>:]]:匹配词的结束位置。
注意:
特殊字符^有两个用途,一方面在字符集合的开始位置放置^可以起到否定字符集的作用,另一方面,^可以用于匹配串的开始位置。
三、后话
好了,今天的文章内容就到这里,感谢观看。