mysql正则表达式使用说明

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

一个字符类“[...]”匹配在方括号内的任何字符。例如,“[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]*,$’

时间: 2024-08-01 18:45:06

mysql正则表达式使用说明的相关文章

简述MySQL 正则表达式_Mysql

我们已经了解到MySQL可以通过 LIKE ...% 来进行模糊匹配. MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表达式匹配. 如果您了解PHP或Perl,那么操作起来就非常简单,因为MySQL的正则表达式匹配与这些脚本的类似. 下表中的正则模式可应用于 REGEXP 操作符中. 实例 了解以上的正则需求后,我们就可以更加自己的需求来编写带有正则表达式的SQL语句.以下我们将列出几个小实例(表名:person_tbl )来加深我们的理解: 查找

mysql 正则表达式查询与实例

mysql教程 正则表达式查询与实例    ^ 匹配字符串的开始部分  $ 匹配字符串的结束部分  $sql ="SELECT 'fonfo' REGEXP '^fo$' from  string_find";     . 匹配任何字符(包括回车和新行)  $sql ="SELECT 'fofo' REGEXP '^f.*$' from  string_find";     a* 匹配0或多个a字符的任何序列    $sql ="SELECT 'Ban'

MySql正则表达式的描述

mysql|正则 正则表达式(regex)是定义复杂查询的一个强有力的工具. 这里是一个简单的资料,它忽略了一些详细的信息. 正则表达式定义了一个字符串的规则.最简单的正则表达式不包含任何保留字.例如,正则表达式hello只和字符串"hello"匹配. 一般的正则表达式使用了某些特殊的结构,所以它能匹配更多的字符串.例如,正则表达式hello|word既能匹配字符串"hello"也能匹配字符串"word".举一个更复杂一点的例子,正则表达式B[a

MySQL正则表达式初步

  我们知道,在SQL之中,可以用 like 这个谓词(表达式) 来进行模糊检索,并支持 %,?,_等占位符. 但是,这个模糊检索的功能有很多限制,简单来说就是太模糊了. 在MySQL中提供了 REGEXP 关键字来支持正则表达式,当然,只是一些很简单的正则啦. 首先,我们构造一些测试数据. ? 1 2 3 4 5 6 7 8 9 -- 建表 USE test; DROP TABLE IF EXISTS t_regcustomer; CREATE TABLE t_regcustomer (   

MySQL正则表达式使用

  使用REGEXP关键字 1.基本字符匹配 ? 1 2 3 SELECT prod_name From Products Where prod_name REGEXP'.000' LIKE和REGEXP区别 LIKE会匹配这个列,而REGEXP会在列值内进行匹配 在MySQL中正则表达式不区分大小写,要区分需使用BINARY关键字,如Where prod_name REGEXP BINARY'Jet.000' 2.进行OR匹配 使用"|" ? 1 2 3 SELECT prod_na

mysql正则表达式 LIKE 通配符

扩展正则表达式的一些字符是: "."匹配任何单个的字符. 一个字符类"[...]"匹配在方括号内的任何字符.例如,"[abc]"匹配"a"."b"或"c".为了命名字符的一个范围,使用一个"-"."[a-z]"匹配任何小写字母,而"[0-9]"匹配任何数字. " * "匹配零个或多个在它前面的东西.例如,&q

coolcode转SyntaxHighlighter与Mysql正则表达式实现分析_正则表达式

最近,我抽空改成SyntaxHighlighter.由于coolcode插件的开头标签是 <coolcode> 或者[coolcode]这样的,而SyntaxHighlighter是 [code lang="php"] 这样的(或者其他).遂只能想办法把老的格式转化成新的格式.当然,肯定用到正则表达式了. 原来的代码高亮开头标识为 <coolcode lang="php" download="123.php" linenum=&

mysql正则表达式 LIKE 通配符_正则表达式

扩展正则表达式的一些字符是: "."匹配任何单个的字符. 一个字符类"[...]"匹配在方括号内的任何字符.例如,"[abc]"匹配"a"."b"或"c".为了命名字符的一个范围,使用一个"-"."[a-z]"匹配任何小写字母,而"[0-9]"匹配任何数字. " * "匹配零个或多个在它前面的东西.例如,&q

mysql正则表达式字符替换语句

 代码如下 复制代码 update comment set url=IF(url REGEXP 'test.yahoo.com.cn',REPLACE(url,'www1.www.111cn.net','www.sina.com'),REPLACE(url,'www2.yahoo.com','www.sina.com')) where 1=1; update comment set author_url=REPLACE(author_url,'hzhuti','sina') where auth