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

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

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


前言


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

使用介绍

1.基础匹配

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

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

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

      代码如下(示例):

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

    返回结果:

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

    	SELECT ‘world’  REGEXP '1000';
    

    返回结果:

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

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

2.二选一(OR)匹配

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

    (SQL示例):

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

3.特定一组字符的匹配

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

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

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

4.范围匹配

  1. 上面第3点中,我们了解了集合符号 [ ] 可以对集合内每个元素进行匹配,那么实际上也可以利用集合对一个范围内的元素进行匹配:
    (SQL示例):
    	SELECT t_name FROM test WHERE t_name REGEXP '[5-7] Ton';
    
    	Jack 5
    	.6Lucy
    	7 Adam
    
  2. 从上面的结果我们可以看出,在存在默认集合规则的元素中,我们可以制定范围进行匹配,如字母 [a-z]匹配字符a到z间所有字母在数据列中出现情况并返回结果。同时还能发现,集合中对串的匹配并没指定位置,.6Lucy中的6并不是在首位,但是仍能返回。

5.特殊字符匹配

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

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

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

6.字符类匹配

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

7.多个实例结果匹配

  1. 想要使用正则表达式对多个实例进行匹配,需要用到正则表达式库中的重复元字符:
    • *:匹配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 so
    	3sos
    
  2. 解释上面的SQL语句:\( 对括号进行转义,[0-9]匹配结果中带有0-9范围内数字,sos?中,对最后一个s加上匹配符?匹配s出现0或1次。
    (SQL示例):
    	SELECT t_name FROM test WHERE t_name REGEXP '[:digital:]{4}';
    
  3. 判断出现带有连续4个数字的字符集

8.使用定位符匹配

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

总结

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

你可能感兴趣的:(基础总结,项目相关技术点整理,正则表达式,mysql,perl)