Mysql中正则表达式Regexp常见用法及说明

吾爱主题 阅读:174 2022-12-13 17:15:00 评论:0

Mysql中Regexp常见用法

模糊匹配,包含特定字符串

?
1 2 3 4 5 # 查找content字段中包含“车友俱乐部”的记录 select * from club_content where content regexp '车友俱乐部'   # 此时的regexp与 like 的以下用法是等同的 select * from club_content where content like '%车友俱乐部%'

模糊匹配,以特定字符串开头

?
1 2 3 4 5 # 查找content字段中以“车友”开头的记录 select * from club_content where content regexp '^车友'   # 此时的regexp与 like 的以下用法是等同的 select * from club_content where content like '车友%'

模糊匹配,以特定字符串结尾

?
1 2 3 4 5 # 查找content字段中以“车友”结尾的记录 select * from club_content where content regexp '车友$'   # 此时的regexp与 like 的以下用法是等同的 select * from club_content where content like '%车友'

模糊匹配,或关系

?
1 2 # 查找content字段中包含“心得”、“分享”或“技术贴” select * from club_content where content  REGEXP '心得|分享|技术贴'

模糊匹配,不包含单个字符

?
1 2 # 查找content字段中不包含“车”字、“友”字的记录 select * from club_content where content  REGEXP [^车友]

这个结果跑出来一看大吃一惊,竟然把所有记录给跑出来,这是为什么呢?

因为一旦加了这个方括号"[]",它就把里面的内容拆成单个的字符再匹配,它会逐个字符去匹配判断是不是等于“车”,或者是不是等于“友“,返回的结果是一组0、1的逻辑值。

如果想匹配不包含特定字符串,该怎么实现呢?

模糊匹配,不包含特定字符串

?
1 2 # 查找content字段不包含“车友”字符串的记录 select * from club_content where content not REGEXP '车友'

Regexp关键字及正则表达式的常用通配符

在Mysql中使用Regexp关键字来指定正则表达式的匹配内容。

语法:

字段 regexp ‘匹配字符’;

MySQL中使用 REGEXP 操作符来进行正则表达式匹配。根据正则表达式的规则,用来查询或者替换符合指定要求的内容。

–select <字段> from 表 where <字段> REGEXP '通配符/字符';

通配符 说明 例子
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置 '^b’匹配以字母 b 开头的字符串
$ 匹配文本的结束字符,如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置 ‘st$’ 匹配以 st 结尾的字符串
. 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用像 ‘[.\n]’ 的模式。 ‘b.t’ 匹配任何 b 和 t 之间有一个字符
| 或,多匹配符链接 ‘z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 则匹配 “zood” 或 “food”。
* 匹配零个或多个在它前面的字符 zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}
+ 匹配前面的字符/子表达式 1 次或多次 ‘ba+’ 匹配以 b 开头,后面至少紧跟一个 a;‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
<字符串> 匹配包含指定字符的文本 ‘fa’ 匹配包含‘fa’的文本
[字符集合] 匹配字符集合中的任何一个字符 ‘[ar]’ 匹配 a 或者 r。
[^] 负值字符集合; 匹配不包含在括号中的任何字符 ‘[^abc]’ 匹配任何不包含 a、b 或 c 的字符串
字符串{n,} n 是一个非负整数.匹配前面的字符串n 次 ‘e{2}’ 匹配 2 个或多个的 e, 例如:feed
字符串 {n,m} m 和 n 均为非负整数,其中n <= m。匹配前面的字符串 n至 m 次 ‘b{2,4}’ 匹配最少 2 个,最多 4 个,例如baby

示例:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #匹配符合要求的多个字符/字符串 --字符*和+都可以匹配多个该符号之前的字符。不同的是,,而*可以表示 0 个字符。 '--select <字段> from 表 where   <字段> REGEXP  ' 字符1+ '; ' --+结果匹配‘字符1 '一次或多次 --select <字段> from 表 where   <字段> REGEXP  ' ^字符1* '; --匹配‘字符1' 0次或多次 #匹配指定的字符/字符串,需要匹配多个的场合,使用‘| '分号隔开。 ' --select <字段> from 表 where   <字段> REGEXP  '字符1|字符2|字符3*'; #查询以特定字符或字符串开头的数据 '--select <字段> from 表 where   <字段> REGEXP  ' ^字符 '; #匹配指定字符以外的字符 ' --select <字段> from 表 where   <字段> REGEXP  '[^字符1~字符3]*'; #查询以特定字符或字符串结尾的数据 '--select <字段> from 表 where   <字段> REGEXP  ' 字符$ '; #替代字符串中的任意一个字符,例如:a.b =acb,adb ' --select <字段> from 表 where   <字段> REGEXP  '字符1.字符2'; '#查询可以匹配指定字符串中的任意一个字符的字符串 ' --select <字段> from 表 where   <字段> REGEXP  '[字符1字符2字符3]*'; '#查询陪陪指定集合的区间内容的数据 #[a-z]”表示从 a~z 的所有字母;“[0-9]”表示从 0~9 的所有数字; “[a-z0-9]”表示包含所有的小写字母和数字;“[a-zA-Z]”表示匹配所有字符。 ' --select <字段> from 表 where   <字段> REGEXP  '[字符1~字符3]*'; #使用{n,}或者{n,m}来指定字符串连续出现的次数 '--select <字段> from 表 where   <字段> REGEXP  ' 匹配的字符{匹配次数,}* '; 例: --billy,silaly,tilly ' --select  name from  namestd where name  regexp 'l{2,}; ' --select <字段> from 表 where   <字段> REGEXP  '匹配的字符{匹配次数1,匹配次数2}'; '例:--LiMing,Lily,LiPingPing  匹配字母“i” 一至三次 ' --select  name from  namestd where name  regexp 'i{1,3};

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/fwj_ntu/article/details/82896169

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容