正则表达式是用来匹配文本的特殊的串(字符集合)。正则表达式的作用是匹配文本,将一个模式(即正则表达式)与一个文本串进行比较。
仅为正则表达式语言的一个子集:MySQL仅支持多数正则表达式实现的一个很小的子集。
关键字:REGEXP后所跟的东西作为正则表达式。
. 是正则表达式语言中一个特殊的字符,它表示匹配任意一个字符,因此每个行都被检索出来。
匹配不区分大小写:MySQL的正则表达式(自版本3.23.4后)不区分大小写。如果要区分大小写,可使用BINARY关键字。
为搜索两个串之一(或者为这个串,或者为另外一个串),使用 | 操作符,| 为正则表达式的OR操作符,它表示匹配其中之一。[]是另一种形式的OR语句。
字符集合也可以被否定,即它们将匹配除指定字符外的任何东西。为否定一个字符集,在集合的开始处放置一个^符号即可。
匹配范围:可使用 - 来定义一个范围。范围不限于完整的集合,如[1-2]和[6-9]也是合法的范围。此外,范围不一定只是数值的,如[a-z]匹配任意字母字符。
为了匹配特殊字符,必须用\\为前导。如\\-表示查找-,这种处理就是所谓的转义,正则表达式内具有特殊的所有字符都必须以这种方式转义。这包含 . 、**|、[]**以及迄今为止使用过的其他特殊字符。\\也用来引用元字符(具有特殊含义的字符),如下表所示:
匹配\:为匹配反斜杠(\)字符本身,需要使用\\\。
\或\?:多数正则表达式实现使用单个反斜杠转义特殊字符,以便能使用这些字符本身。但是MySQL要求两个反斜杠(MySQL自身解释一个,正则表达式库解释另外一个)。
Like与regexp的差别:Like匹配整个列,如果被匹配的文本在列值中出现,Like将不会找到它,相应的行也不被返回(除非使用通配符)。而regexp在列值内进行匹配,如果被匹配的文本在列值中出现,regexp将会找到它,相应的行将被返回。
常用匹配字符类表如下:
常用重复元字符表如下:
常用定位元字符表如下:
^的双重用途:当在集合中(用[和]定义),则用它来否定该集合;否则,用来指串的开始处。
使regexp起类似于like的作用,like和regexp的不同在于,like匹配整个串而regexp匹配子串。利用定位符,通过用^开始每个表达式,用$结束每个表达式,可以使用regexp的作用与like一样。
简单的正则表达式:regexp检查总是返回0(没有匹配)或1(匹配)。