11.MySQL正则表达式

MySQL 使用 Unicode 国际组件 (ICU) 实现正则表达式支持,它提供完整的 Unicode 支持并且是多字节安全的。

下面的列表涵盖了一些可以在正则表达式中使用的基本特殊字符和结构,有关用于实现正则表达式支持的 ICU 库支持的完整正则表达式语法的信息,请访问 International Components for Unicode 网站

1.函数和运算符

1.1REGEXP运算符、RLIKE运算符、REGEXP_LIKE()函数

如果字符串expr匹配由模式pat指定的正则表达式,则返回1,否则0

如果exprpatNULL,则返回值为NULL

expr REGEXP pat

expr RLIKE pat

REGEXP_LIKE(expr, pat[, match_type])
//REGEXP示例

mysql> SELECT 'Michael!' REGEXP '.*';
//返回1

mysql> SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';
//返回0

mysql> SELECT 'a' REGEXP '^[a-d]';
//返回1
//REGEXP_LIKE()示例

mysql> SELECT REGEXP_LIKE('Michael!', '.*');
//返回1

mysql> SELECT REGEXP_LIKE('new*\n*line', 'new\\*.\\*line');
//返回0

mysql> SELECT REGEXP_LIKE('a', '^[a-d]');
//返回1

mysql> SELECT REGEXP_LIKE('abc', 'ABC');
//返回1

mysql> SELECT REGEXP_LIKE('abc', 'ABC', 'c');
//返回0

1.2NOT REGEXP运算符、NOT RLIKE运算符

否定正则表达式。

expr NOT REGEXP pat

expr NOT RLIKE pat

NOT (expr REGEXP pat)

1.3REGEXP_INSTR()函数

返回字符串expr的子字符串的开始索引,此expr匹配由模式pat指定的正则表达式。

如果没有匹配,则返回0

如果exprpatNULL,则返回值为NULL

字符索引从1开始。

REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, match_type]]]])
//REGEXP_INSTR()示例

mysql> SELECT REGEXP_INSTR('dog cat dog', 'dog');
//返回1

mysql> SELECT REGEXP_INSTR('dog cat dog', 'dog', 2);
//返回9

mysql> SELECT REGEXP_INSTR('aa aaa aaaa', 'a{2}');
//返回1

mysql> SELECT REGEXP_INSTR('aa aaa aaaa', 'a{4}');
//返回8

1.4REGEXP_REPLACE()函数

用替换字符串repl替换在字符串expr中的occurrence,此expr匹配由模式pat指定的正则表达式,并返回结果字符串。

如果exprpatreplNULL, 则返回值为NULL

REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]])
//REGEXP_REPLACE()示例

mysql> SELECT REGEXP_REPLACE('a b c', 'b', 'X');
//返回a X c

mysql> SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3);
//返回abc def X

1.5REGEXP_SUBSTR()函数

返回字符串expr的子字符串,此expr匹配由模式pat指定的正则表达式。

如果没有匹配,则返回0

如果exprpatNULL,则返回值为NULL

REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]])
//REGEXP_SUBSTR()示例

mysql> SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+');
//返回abc

mysql> SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+', 1, 3);
//返回ghi

2.参数

2.1pos

 在expr中开始搜索的位置。如果省略,则默认值为 1。

2.2occurrence

要搜索或替换的匹配项。如果省略,REGEXP_INSTR()REGEXP_SUBSTR()默认值为1REGEXP_REPLACE()默认值为0(表示“替换所有匹配项”)。

2.3return_option

返回哪种类型的位置。如果此值为0,则 REGEXP_INSTR()返回匹配的子字符串的第一个字符的位置。如果此值为1,则 REGEXP_INSTR()返回匹配子字符串之后的位置。如果省略,则默认值为0

2.4match_type

指定如何执行匹配的字符串。

match_type描述
c区分大小写的匹配。
i不区分大小写的匹配。(默认)
m多行模式。识别字符串中的行终止符。默认行为是仅在字符串表达式的开头和结尾匹配行终止符。
n. 字符匹配行终止符。默认值是 .匹配在行结尾停止。
uUnix专用的行尾。只有换行符通过.^、 $匹配运算符会被识别为行结尾。

3.特殊字符

模式描述
^a以……开头。
a$以……结尾。
.匹配任何单个字符(包括回车符和换行符,尽管要在字符串中间匹配这些字符,必须给出
m(多行)匹配控制字符或(?m) 模式内修饰符)。
a*包含*前面的0个或多个a。
(abc)*包含*前面的0个或多个abc 中的字符。
a+包含+前面的1个或多个a。
a?包含?前面的0个或1个a。
de | abc包含deabc其中的一个即可。
{m}m 次重复。
{m,n}m 到 n 次重复。
[abc]expr包含的内容必须在a、b、c之内。
[a-z]expr包含的内容必须在a 到 z(包括a和z)之内。
[0-9]expr包含的内容必须在0 到 9(包括0和9)之内。
[^abc]expr包含的内容必须不包含a、b、c其中任意一个。

4.[:character_class:]

字符类名称意义
alnum字母数字字符
alpha字母字符
blank空白字符
cntrl控制字符
digit数字字符
graph图形字符
lower小写字母字符
print图形或空格字符
punct标点符号
space空格、制表符、换行符和回车符
upper大写字母字符
xdigit十六进制数字字符

5.转义符

MySQL 在字符串中使用 C 语言转义语法风格。

转义符描述
\a响铃
\b退格
\f换页
\n换行符
\r回车
\t水平制表(HT) 
\v垂直制表(VT)
\’单引号
\”双引号
\\反斜杠
\?问号
\0空(NULL)字符
\ddd1~3 位八进制数所代表的字符
\xhh1~2 位十六进制数所代表的字符

6.示例

//正则表达式模式匹配示例

//查找以 b 开头的名字
mysql> SELECT * FROM pet WHERE REGEXP_LIKE(name, '^b');

//查询以 fy 结尾的名字
mysql> SELECT * FROM pet WHERE REGEXP_LIKE(name, 'fy$');

//查询包含 w 的名字
mysql> SELECT * FROM pet WHERE REGEXP_LIKE(name, 'w');

//查询恰好包含五个字符的名字
mysql> SELECT * FROM pet WHERE REGEXP_LIKE(name, '^.....$');
mysql> SELECT * FROM pet WHERE REGEXP_LIKE(name, '^.{5}$');

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/basic/mysql/17437.html

(0)
上一篇 2022年9月12日 22:59
下一篇 2020年7月18日 14:56

相关推荐

  • 2.安装MySQL和phpMyAdmin的步骤(Fedora)

    1.配置MySQL源 首先到https://dev.mysql.com/downloads/repo/yum/,下载对应的 MySQL Yum 存储库并安装。 验证安装 2.安装MySQL 在Fedora下安装MySQL后,会自动注册为服务,并随操作系统第一次重新启动后自动启动。 在Fedora下安装MySQL后,会自…

    MySQL教程 2022年9月2日
    06200
  • 3.安装MySQL和Workbench的步骤(Windows)

    MySQL Installer 可以安装和管理(添加、修改、升级和删除)MySQL Server以及其它的MySQL相关产品。 1.安装依赖 Microsoft Visual C++ 2019 Redistributable :https://docs.microsoft.com/zh-CN/cpp/windows/l…

    MySQL教程 2022年9月3日
    0790
  • 8.MySQL数据操作语句

    1.增加记录(INSERT) INSERT 语法 增加记录(按列顺序) INSERT [INTO] 表名 VALUES (值1, 值2,….); 增加记录(特定列) INSERT [INTO] 表名 (列名1, 列名2,…) VALUES (值1, 值2,….); 复制已存在表1数据到已存在表2(全部列) INSERT…

    MySQL教程 2022年9月8日
    0670

发表回复

登录后才能评论