mysql怎么子串匹配 mysql中字符串连接用什么函数( 二 )


作为一个更为复杂的示例,正则表达式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(表示不匹配)

推荐阅读