正则表达式形貌了一组字符串。最简朴的正则表达式是不含任何特别字符的正则表达式。比方,正则表达式hello婚配hello。
非寻常的正则表达式采用了特别的特定构造,从而使得它们能够与1个以上的字符串婚配。比方,正则表达式hello|word婚配字符串hello或字符串word。
作为一个更加庞杂的示例,正则表达式B[an]*s婚配下述字符串中的任何一个:Bananas,Baaaaas,Bs,以及以B最先、以s完毕、并在个中包含恣意数量a或n字符的任何其他字符串。
以下是可用于随REGEXP操作符的表的形式。
运用示例,查找用户表中Email花样毛病的用户纪录:
SELECT * FROM users WHERE email NOT REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+.[A-Z]{2,4}$'
MySQL数据库中正则表达式的语法,重要包含种种标记的寄义。
(^)字符
婚配字符串的最先位置,如“^a”示意以字母a开首的字符串。
mysql> select 'xxxyyy' regexp '^xx'; +-----------------------+ | 'xxxyyy' regexp '^xx' | +-----------------------+ | 1 | +-----------------------+ 1 row in set (0.00 sec)
查询xxxyyy字符串中是不是以xx开首,效果值为1,示意值为true,满足前提。
($)字符
婚配字符串的完毕位置,如“X^”示意以字母X末端的字符串。
(.)字符
这个字符就是英文下的点,它婚配任何一个字符,包含回车、换行等。
(*)字符
星号婚配0个或多个字符,在它之前必需有内容。如:
mysql> select 'xxxyyy' regexp 'x*';
这个SQL语句,正则婚配为true。
(+)字符
加号婚配1个或多个字符,在它之前也必需有内容。加号跟星号的用法相似,只是星号许可涌现0次,加号则必需最少涌现一次。
(?)字符
问号婚配0次或1次。
实例:
如今依据上面的表,能够装配种种不同类型的SQL查询以满足要求。在这里列出一些明白。斟酌我们有一个表为person_tbl和有一个字段名为称号:
查询找到一切的名字以'st'开首
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
查询找到一切的名字以'ok'末端
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
查询找到一切的名字包函'mar'的字符串
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
查询找到一切称号以元音最先和'ok'完毕 的
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
一个正则表达式中的能够运用以下保留字
^
所婚配的字符串今背面的字符串开首
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 "fonfo" REGEXP "^f.*"; -> 1(示意婚配)
a*
婚配恣意多个a(包含空串)
mysql> select "Ban" REGEXP "^Ba*n"; -> 1(示意婚配) mysql> select "Baaan" REGEXP "^Ba*n"; -> 1(示意婚配) mysql> select "Bn" REGEXP "^Ba*n"; -> 1(示意婚配)
a+
婚配恣意多个a(不包含空串)
mysql> select "Ban" REGEXP "^Ba+n"; -> 1(示意婚配) mysql> select "Bn" REGEXP "^Ba+n"; -> 0(示意不婚配)
a?
婚配一个或零个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(包含空串)
mysql> select "pi" REGEXP "^(pi)*$"; -> 1(示意婚配) mysql> select "pip" REGEXP "^(pi)*$"; -> 0(示意不婚配) mysql> select "pipi" REGEXP "^(pi)*$"; -> 1(示意婚配)
{1}
{2,3}
这是一个更全面的要领,它能够完成前面好几种保留字的功用
a*
能够写成a{0,}
a+
能够写成a{1,}
a?
能够写成a{0,1}
在{}内只要一个整型参数i,示意字符只能涌现i次;在{}内有一个整型参数i,背面跟一个“,”,示意字符能够涌现i次或i次以上;在{}内只要一个整型参数i,背面跟一个“,”,再跟一个整型参数j,示意字符只能涌现i次以上,j次以下(包含i次和j次)。个中的整型参数必需大于即是0,小于即是 RE_DUP_MAX(默许是255)。 如果有两个参数,第二个必需大于即是第一个
[a-dX]
婚配“a”、“b”、“c”、“d”或“X”
[^a-dX]
婚配除“a”、“b”、“c”、“d”、“X”之外的任何字符。
“[”、“]”必需成对运用
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(示意不婚配)
相干引荐:
JS正则表达式圆满完成身份证校验功用
怎样用正则表达式让JavaScript的代码高亮
javascript婚配js中解释的正则表达式代码
以上就是关于MySQL中REGEXP正则表达式运用小结的细致内容,更多请关注ki4网别的相干文章!