ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL系列之正则函数regexp

2022-07-13 16:01:50  阅读:887  来源: 互联网

标签:字符 匹配 like 正则 MySQL 字符串 regexp


概述
MySQL5系列最高版本号是5.7;没有MySQL 6,7系列。

MySQL 8.0+才引入regexp_replace,regexp_like,regexp_instr,regexp_substr四个函数,在低于此版本的MySQL客户端执行这四个函数,报错:FUNCTION regexp_xxx does not exist

正则
like/not like
like本来是模糊匹配,此处引申一下。like(not like),MySQL用于模式匹配的运算符,将列与给定值进行比较,并返回与模式相同(不同)的列。功能远远没有正则强大。

regexp/not regexp
MySQL regexp匹配所使用的字符,与常规正则表达式相同:

模式 模式匹配什么
^ 匹配字符串开头
$ 匹配字符串结尾
. 匹配任意单个字符
[...] 匹配方括号间列出的任意字符
[^...] 匹配方括号间未列出的任意字符
p1|p2|p3 交替匹配任意 p1 或 p2 或 p3
* 匹配前面的元素的零次或多次
+ 匹配前面的元素的一次或多次
{n} 匹配前面的元素 n 次
{m,n} 匹配前面的元素 m 至 n 次
示例:
查询所有以元音开头并以ok结尾的name:SELECT name FROM person WHERE name REGEXP '^[aeiou].*ok$';

regexp_replace
regexp_replace()函数用于通过匹配字符来替换给定的字符串。
select regexp_replace('str', 'character', 'new_character');
将str里面含有character的字符替换成new_character。

regexp_like
regexp_like()函数用于比较给定的字符串,如果字符串相同则返回 1,否则返回 0。
select regexp_like(str1, str2);

如执行:select regexp_like('MCA', 'mca');,输出:1。

regexp_substr
regexp_substr()用于从给定的字符串中返回子字符串。
select regexp_substr('str', 'match_type', occurrence, position);

如执行:select regexp_substr('my sql function', '[a-z]+', 1, 3);,输出:function

regexp_instr
regexp_instr()函数返回与正则表达式模式匹配的子字符串的起始索引。索引从 1 开始。如果不匹配,则返回 0。
REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, match_type]]]])
expr 为源字符串
pat 为正则表达式
pos 为可选参数,标识开始匹配的位置,默认为 1
occurrence 为可选参数,标识匹配的次数,默认为 1
return_option 为可选参数,指定返回值的类型。如果为 0,则返回匹配的第一个字符的位置。如果为 1,则返回匹配的最后一个位置,默认为0
match_type 为可选参数,允许优化正则表达式,可包含以下字符:

c:匹配区分大小写
i:匹配不区分大小写
m:多行模式。识别字符串中的行终止符。默认是仅在字符串表达式的开头和结尾匹配行终止符
n:与.行终止符匹配
u:仅匹配 Unix 的行结尾。只有换行符被识别为以 .,^和$结尾的行
regexp_extract
非MySQL函数,而是Hive函数。

参考
https://dev.mysql.com/doc/refman/8.0/en/regexp.html
https://learnku.com/mysql/wikis/36463

原文链接:https://blog.csdn.net/lonelymanontheway/article/details/118197636

标签:字符,匹配,like,正则,MySQL,字符串,regexp
来源: https://www.cnblogs.com/shoshana-kong/p/16474183.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有