600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 【详解】MySQL中使用正则表达式

【详解】MySQL中使用正则表达式

时间:2023-05-02 21:10:04

相关推荐

【详解】MySQL中使用正则表达式

【详解】MySQL中使用正则表达式

前言使用介绍1.基础匹配2.二选一(OR)匹配3.特定一组字符的匹配4.范围匹配5.特殊字符匹配6.字符类匹配7.多个实例结果匹配8.使用定位符匹配总结

前言


MYSQL中的正则表达式,主要用于对文本串进行条件筛选的操作,比如筛选出串中某些带指定数字、符号、子串的部分。

使用介绍

1.基础匹配

MySQL中使用正则表达式的标志:REGEXP

REGEXP在使用上类似MYSQL中的条件LIKE,但是REGEXP告诉服务器,它之后的语句为正则匹配。

而且LIKE的搜索范围为整个列,当列值中出现要搜索的子串,并不会返回搜索结果,而REGEXP则是在列值中进行搜索。

代码如下(示例):

SELECT t_name FROM test WHERE t_name REGEXP '.000';

返回结果:

Jack 1000Jack 2000

从上面例子看出,正则匹配标识符REGEXP后面 +‘正则表达式筛选条件’,因为我们而在使用REGEXP对某个制定串进行匹配时,REGEXP匹配到元素,返回1值,否则返回0值

(示例):

SELECT ‘world’ REGEXP '1000';

返回结果:

0

自MySQL 3.23.4版本之后,MySQL中正则表达式匹配得到的结果,默认不区分大小写,可以在EXGEXP 后使用BINARY进行强调:

(示例):

SELECT t_name FROM test WHERE t_name REGEXP BINARY '.000';

2.二选一(OR)匹配

正则表达式中使用符号|来起到OR的作用,使用多个|符可以构成多个匹配模式:

(SQL示例):

SELECT t_name FROM test WHERE t_name REGEXP BINARY '1000|2000|3000';

3.特定一组字符的匹配

对某组字符中任意一个单一字符做匹配,而不是将它们作为一个串进行匹配,也是可以实现的,需要使用[xxx] Ton

(SQL示例):

SELECT t_name FROM test WHERE t_name REGEXP '[567] Ton';

Jack 56Lucy7 Adam

[567] Ton 是[5|6|7] Ton的缩写,但是 [ ]是必需的,如果我们直接使用 ‘5|6|7 Ton’ 得到的结果将不是上面的输出,原因是如果不对 | 进行限制,那么它的默认作用域将是整个文本串,所以我们这里可以分析得到[ ] 的作用是构建一个多匹配模式的封闭集合

当然,我们也可以使用否定符号^来对进行一个NOT操作排除几个字符:’[ ^567 ] Ton’ 即排除全部含有5|6|7的结果集。

4.范围匹配

上面第3点中,我们了解了集合符号 [ ] 可以对集合内每个元素进行匹配,那么实际上也可以利用集合对一个范围内的元素进行匹配:

(SQL示例):

SELECT t_name FROM test WHERE t_name REGEXP '[5-7] Ton';

Jack 5.6Lucy7 Adam

从上面的结果我们可以看出,在存在默认集合规则的元素中,我们可以制定范围进行匹配,如字母 [a-z]匹配字符a到z间所有字母在数据列中出现情况并返回结果。同时还能发现,集合中对串的匹配并没指定位置,.6Lucy中的6并不是在首位,但是仍能返回。

5.特殊字符匹配

任何语言中正则表达式的使用都躲不开字符转义的问题,当我们要搜索特殊字符,甚至就是正则表达式中使用的某些字符时,需要在搜索条件中进行转义,从而使MySQL的语法文本分析得到正确提示:

(SQL示例):

SELECT t_name FROM test WHERE t_name REGEXP '\\[';

[232

对于全部出现在正则表达式中的特殊字符匹配,使用 **\**作为转义,使用两个反斜杠的原因是,MySQL自己分析解释时使用一个,正则表达式库使用另一个

某些元字符,即本身具有特殊意义的字符,也使用双反斜杠转义,如 \n 换行符。

6.字符类匹配

为了满足快速匹配需求,MySQL中正则表达式内置了常用字符类,我们只需要调用这些声明,就可以快速匹配存在某些字符的结果。例如: [:alpha:] :即任意字符[:alnum:] :任意字母数字[:cntrl:]:任意ASCII控制字符…

7.多个实例结果匹配

想要使用正则表达式对多个实例进行匹配,需要用到正则表达式库中的重复元字符: *:匹配0个或多个+:匹配1个或多个?:匹配0个或一个{n}:指定匹配n个{n,m}:匹配大于n小于m个,m<=255

(SQL示例):

SELECT t_name FROM test WHERE t_name REGEXP '\\([0-9] sos?\\)';

1 so3sos

解释上面的SQL语句:\( 对括号进行转义,[0-9]匹配结果中带有0-9范围内数字,sos?中,对最后一个s加上匹配符?匹配s出现0或1次。

(SQL示例):

SELECT t_name FROM test WHERE t_name REGEXP '[:digital:]{4}';

判断出现带有连续4个数字的字符集

8.使用定位符匹配

之前我们说过,正则表达式的匹配对文本中任何位置生效,如果我们想要优化性能,制定某个位置的文本进行匹配,这需要我们使用定位符进行约束: ^:对起始位$:结尾[[:<:]]:某个词的开始[[:>:]]:某个词的结尾

总结

以上就是总结的MySQL中使用正则表达式进行模式匹配的一些常用知识。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。