MySQL仅支持多数正则表达式实现的一个很小的子集。这里列举MySQL支持的大多数内容!!!

1、基本字符匹配

#相当于like "%14%"
SELECT * FROM sys_dept WHERE ancestors REGEXP "14";

匹配不区分大小写,如果要区分大小写,可使用BINARY字段,即WHERE ancestors REGEXP BINARY “14”;

2、进行OR匹配

SELECT * FROM sys_dept WHERE ancestors REGEXP "14|15|1";

3、匹配几个字符之一

SELECT * FROM sys_dept WHERE ancestors REGEXP "[145]";

这里,[145]定义一组字符,它的意思是匹配1或4或5。
正如所见,[]是另一种形式的OR语句。事实上,正则表达式[145]为[1|4|5]Ton的缩写,也可以使用后者。但是,需要用[ ]来定义OR语句查找什么。
字符集合也可以被否定,即,它们将匹配除指定字符外的任何东西。为否定一个字符集,在集合的开始处放置一个^即可。因此,尽管[123]匹配字符1、2或3,但

[^123]

却匹配除这些字符外的任何东西。

4、匹配范围

集合可用来定义要匹配的一个或多个字符。例如,匹配数字0到9:[0-9]

SELECT * FROM products WHERE pro_dname REGEXP '[1-5]Ton';

5、匹配特殊字符

为了匹配特殊字符,必须用\为前导。\-表示查找-,.表示查找.。
即所谓的转义。
\也用来引用元字符,如下表

元字符

说明

\\f

换页

\\n

换行

\\r

回车

\\t

指标

\\v

纵向制表

  • 匹配
    为了匹配反斜杠()字符本身,需要使用\\。
  • \或\
    多数正则表达式实现使用单个反斜杠转义特殊字符,以便能使用这些字符本身。但 MySQL要求两个反斜杠(MySQL自己解释一个,正则表达式库解释另一个)。

6、匹配字符类

常用的预定义字符集。


说明

[:alnum:]

任意字母和数字(同[a-z|A-Z|0-9])

[:alpha:]

任意字符(同[a-z|A-Z])

[:blank:]

空格和制表(同[\\t])

[:cntrl:]

ASCII控制字符(ASCII 0到31和127)

[:digit:]

任意数字(同[0-9])

[:graph:]

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

[:lower:]

任意小写字母(同[a-z])

[:print:]

任意可打印字符

[:punct:]

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

[:space:]

包括空格在内的任意空白字符(同\\f\\n\\r\\t\\v])

[:upper:]

任意大写字母(同[A-Z])

[:xdigit:]

任.意十六进制数字(同[a-fA-F0-9])

7、匹配多个实例

可以使用正则表达式重复元字符来完成

元字符

说明

*

0个或多个匹配

+

1个或多个匹配(等于{1,})

?

0个或1个匹配 (等于{0,})

{n}

指定数目的匹配

{n,}

不少于指定数目的匹配

{n,m}

匹配数目的范围(m不超过255)

例如:

REGEEXP '[[:digit:]]{4}'

8、定位符

前面都是匹配一个串中任意位置的文本,使用下面定位符可以匹配特定位置的文本

元字符

说明

^

文本的开始

$

文本的结尾

[[:

词的开始

[[:>:]]

词的结尾

例如:匹配一个以数字或者小数点开始的数

REGEXP '^[0-9\\.]'
  • ^的双重用途
    两种用法,否定和串的开始处
  • 使REGEXP 起类似like的作用