mysql正则表达式使用方法_mysql正则表达式使用说明

更新时间:2018-08-16    来源:正则表达式    手机版     字体:

【www.bbyears.com--正则表达式】


“.”匹配任何单个的字符。

一个字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的一个范围,使用一个“-”。“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。
“ * ”匹配零个或多个在它前面的东西。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的任何数量的数字,而“.*”匹配任何数量的任何东西。
正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹配小写或大写的“a”而“[a-zA-Z]”匹配两种写法的任何字母。
如果它出现在被测试值的任何地方,模式就匹配(只要他们匹配整个值,SQL模式匹配)。
为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。
为了说明扩展正则表达式如何工作,上面所示的LIKE查询在下面使用REGEXP重写:
为了找出以“b”开头的名字,使用“^”匹配名字的开始并且“[bB]”匹配小写或大写的“b”:


对于REGEXP操作符,正则表达式可以使用任何下述特殊字符和结构:

·         ^

匹配字符串的开始部分。

mysql> SELECT "fonfo" REGEXP "^fo$";                   -> 0

mysql> SELECT "fofo" REGEXP "^fo";                      -> 1

·         $

匹配字符串的结束部分。

mysql> SELECT "fono" REGEXP "^fono$";                 -> 1

mysql> SELECT "fono" REGEXP "^fo$";                    -> 0

·         .

匹配任何字符(包括回车和新行)。

mysql> SELECT "fofo" REGEXP "^f.*$";                    -> 1

mysql> SELECT "fornfo" REGEXP "^f.*$";                -> 1

·         a*

匹配0或多个a字符的任何序列。

mysql> SELECT "Ban" REGEXP "^Ba*n";                     -> 1

mysql> SELECT "Baaan" REGEXP "^Ba*n";                   -> 1

mysql> SELECT "Bn" REGEXP "^Ba*n";                      -> 1

·         a+

匹配1个或多个a字符的任何序列。

mysql> SELECT "Ban" REGEXP "^Ba+n";                     -> 1

mysql> SELECT "Bn" REGEXP "^Ba+n";                      -> 0

·         a?

匹配0个或1个a字符。

mysql> SELECT "Bn" REGEXP "^Ba?n";                      -> 1

mysql> SELECT "Ban" REGEXP "^Ba?n";                     -> 1

mysql> SELECT "Baan" REGEXP "^Ba?n";                    -> 0

·         de|abc

匹配序列de或abc。

mysql> SELECT "pi" REGEXP "pi|apa";                     -> 1

mysql> SELECT "axe" REGEXP "pi|apa";                    -> 0

mysql> SELECT "apa" REGEXP "pi|apa";                    -> 1

mysql> SELECT "apa" REGEXP "^(pi|apa)$";                -> 1

mysql> SELECT "pi" REGEXP "^(pi|apa)$";                 -> 1

mysql> SELECT "pix" REGEXP "^(pi|apa)$";                -> 0

·         (abc)*

匹配序列abc的0个或多个实例。

mysql> SELECT "pi" REGEXP "^(pi)*$";                    -> 1

mysql> SELECT "pip" REGEXP "^(pi)*$";                   -> 0

mysql> SELECT "pipi" REGEXP "^(pi)*$";                  -> 1

·         {1}, {2,3}

{n}或{m,n}符号提供了编写正则表达式的更通用方式,能够匹配模式的很多前述原子(或“部分”)。m和n均为整数。

o        a*

可被写入为a{0,}。

o        a+

可被写入为a{1,}。

o        a?

可被写入为a{0,1}。

更准确地讲,a{n}与a的n个实例准确匹配。a{n,}匹配a的n个或更多实例。a{m,n}匹配a的m~n个实例,包含m和n。

m和n必须位于0~RE_DUP_MAX(默认为255)的范围内,包含0和RE_DUP_MAX。如果同时给定了m和n,m必须小于或等于n。

mysql> SELECT "abcde" REGEXP "a[bcd]{2}e";              -> 0

mysql> SELECT "abcde" REGEXP "a[bcd]{3}e";              -> 1

mysql> SELECT "abcde" REGEXP "a[bcd]{1,10}e";           -> 1

·         [a-dX], [^a-dX]

匹配任何是(或不是,如果使用^的话)a、b、c、d或X的字符。两个其他字符之间的“-”字符构成一个范围,与从第1个字符开始到第2个字符之间的所有字符匹配。例如,[0-9]匹配任何十进制数字 。要想包含文字字符“]”,它必须紧跟在开括号“[”之后。要想包含文字字符“-”,它必须首先或最后写入。对于[]对内未定义任何特殊含义的任何字符,仅与其本身匹配。

mysql> SELECT "aXbc" REGEXP "[a-dXYZ]";                 -> 1

mysql> SELECT "aXbc" REGEXP "^[a-dXYZ]$";               -> 0

mysql> SELECT "aXbc" REGEXP "^[a-dXYZ]+$";              -> 1

mysql> SELECT "aXbc" REGEXP "^[^a-dXYZ]+$";             -> 0

mysql> SELECT "gheis" REGEXP "^[^a-dXYZ]+$";            -> 1

mysql> SELECT "gheisa" REGEXP "^[^a-dXYZ]+$";           -> 0

·         [.characters.]

在括号表达式中(使用[和]),匹配用于校对元素的字符序列。字符为单个字符或诸如新行等字符名。在文件regexp/cname.h中,可找到字符名称的完整列表。

mysql> SELECT "~" REGEXP "[[.~.]]";                     -> 1

mysql> SELECT "~" REGEXP "[[.tilde.]]";                 -> 1

·         [=character_class=]

在括号表达式中(使用[和]),[=character_class=]表示等同类。它与具有相同校对值的所有字符匹配,包括它本身,例如,如果o和(+)均是等同类的成员,那么[[=o=]]、[[=(+)=]]和[o(+)]是同义词。等同类不得用作范围的端点。

·         [:character_class:]

在括号表达式中(使用[和]),[:character_class:]表示与术语类的所有字符匹配的字符类。标准的类名称是:

alnum
 

文字数字字符

alpha
 

文字字符

blank
 

空白字符

cntrl
 

控制字符

digit
 

数字字符

graph
 

图形字符

lower
 

小写文字字符

print
 

图形或空格字符

punct
 

标点字符

space
 

空格、制表符、新行、和回车

upper
 

大写文字字符

xdigit
 

十六进制数字字符

它们代表在ctype(3)手册页面中定义的字符类。特定地区可能会提供其他类名。字符类不得用作范围的端点。

mysql> SELECT "justalnums" REGEXP "[[:alnum:]]+";       -> 1

mysql> SELECT "!!" REGEXP "[[:alnum:]]+";               -> 0

·         [[:<:]], [[:>:]]

这些标记表示word边界。它们分别与word的开始和结束匹配。word是一系列字字符,其前面和后面均没有字字符。字字符是alnum类中的字母数字字符或下划线(_)。

mysql> SELECT "a word a" REGEXP "[[:<:]]word[[:>:]]";   -> 1

mysql> SELECT "a xword a" REGEXP "[[:<:]]word[[:>:]]";  -> 0

要想在正则表达式中使用特殊字符的文字实例,应在其前面加上2个反斜杠“”字符。MySQL解析程序负责解释其中一个,正则表达式库负责解释另一个。例如,要想与包含特殊字符“+”的字符串“1+2”匹配,在下面的正则表达式中,只有最后一个是正确的:

mysql> SELECT "1+2" REGEXP "1+2";                       -> 0

mysql> SELECT "1+2" REGEXP "1+2";                      -> 0

mysql> SELECT "1+2" REGEXP "1\+2";                     -> 1


查询实例:

SELECT * FROM table WHERE parent REGEXP  ‘^0,1,[0-9]*,$’

本文来源:http://www.bbyears.com/aspjiaocheng/43642.html

热门标签

更多>>

本类排行