MySQL系列之正则函数regexp
  TEZNKK3IfmPf 2023年11月14日 19 0

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函数。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   27   0   0 mysql
  TEZNKK3IfmPf   2024年05月17日   53   0   0 sqlmysql
  TEZNKK3IfmPf   2024年05月31日   31   0   0 数据库mysql
  TEZNKK3IfmPf   2024年05月17日   49   0   0 查询mysql索引
  TEZNKK3IfmPf   2024年05月17日   50   0   0 jsonmysql
  TEZNKK3IfmPf   2024年05月17日   50   0   0 mysqlphp
  TEZNKK3IfmPf   2024年05月31日   27   0   0 数据库mysql
TEZNKK3IfmPf