首页 > 代码库 > [MySQL] 用正则表达式进行搜索

[MySQL] 用正则表达式进行搜索

正则表达式的作用就是匹配文本,讲一个模式(正则表达式)与一个文本串进行比较。

 

基本字符匹配

SELECT 列名 FROM 表名 WHERE 列名 REGEXP 条件 ORDER BY 列名;

  形式与LIKE相同,只不过REGEXP后面跟的条件为正则表达式。

 

差别:

  LIKE匹配整个列。如果被匹配的文本在列值中出现,LIKE不会找到它,相应的行也不会被返回(除非使用通配符)。

  REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP会找到它,相应的行将被返回。

 

  正则表达式不区分大小写,如果需要区分则要使用BINARY关键字。如 REGEXP BINARY + 正则表达式条件。

 

进行OR匹配

  使用正则表达式符号‘|’将条件并列。

  例如 1000 OR 2000 = 1000|2000 

 

匹配几个字符之一

  使用[]来定义一组字符

  例如 [123]abc = 1abc 或 2abc 或 3abc

  [123]abc = [1|2|3]abc

 

匹配除指定字符外的任何东西

  [^123] 匹配除1\2\3以外的任何东西

 

匹配范围

  [0123456789] = [0-9]

 

匹配特殊字符

  ‘.‘匹配任意字符

  \\- 表示查找-

  \\. 表示查找.

  \\\ 表示查找\

  

匹配字符类

  类              说明

 [:alnum:]           任意字母和数字[a-zA-Z0-9]

 [:alpha:]            任意字符[a-zA-Z]

 [:blank:]            空格和制表[\\t]

 [:cntrl:]              ASCII控制字符(ASCII 0到31和127)

 [:digit:]            任意数字[0-9]

 [:graph:]            与[:print:]相同,但不包含空格

 [:lower:]             任意小写字母[a-z]

 [:print:]            任意可打印字符

 [:punct:]             既不在[:alnum:]又不在[:cntrl:]中的任意字符

 [:space:]            包含空格在内的任意空白字符[\\f\\n\\r\\t\\v]

 [:upper:]            任意大写字母[A-Z]

 [:xdigit:]             任意十六进制数字[a-fA-F0-9]

 

匹配多个实例

  重复元字符

  元字符                说明

   *               0个或多个匹配

   +                 1个或多个匹配{1,}

   ?                 0个或1个匹配{0, 1}

   {n}               指定数目的匹配

   {n,}                                                  不少于指定数目的匹配

   {n, m}             匹配数目的范围(m不超过255)

 

定位符

  匹配指定位置的文本

  定位元字符

  元字符                  说明

   ^                  文本的开始

   $                    文本的结尾

   [[:<:]]                 词的开始

   [[:>:]]                 词的结尾  

 

  ^有两种用法,在集合中(用[和]定义),用它来否定该集合,否则,用来指串的开始处

  

[MySQL] 用正则表达式进行搜索