MySQL 使用 Unicode 国际组件 (ICU) 实现正则表达式支持,它提供完整的 Unicode 支持并且是多字节安全的。
下面的列表涵盖了一些可以在正则表达式中使用的基本特殊字符和结构,有关用于实现正则表达式支持的 ICU 库支持的完整正则表达式语法的信息,请访问 International Components for Unicode 网站。
1.函数和运算符
1.1REGEXP运算符、RLIKE运算符、REGEXP_LIKE()函数
如果字符串expr
匹配由模式pat
指定的正则表达式,则返回1
,否则0
。
如果expr
或pat
为NULL
,则返回值为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
。
如果expr
或pat
为NULL
,则返回值为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
指定的正则表达式,并返回结果字符串。
如果expr
或pat
或repl
是NULL
, 则返回值为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
。
如果expr
或pat
为NULL
,则返回值为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()
默认值为1
,REGEXP_REPLACE()
默认值为0
(表示“替换所有匹配项”)。
2.3return_option
返回哪种类型的位置。如果此值为0
,则 REGEXP_INSTR()
返回匹配的子字符串的第一个字符的位置。如果此值为1
,则 REGEXP_INSTR()
返回匹配子字符串之后的位置。如果省略,则默认值为0
。
2.4match_type
指定如何执行匹配的字符串。
match_type | 描述 |
c | 区分大小写的匹配。 |
i | 不区分大小写的匹配。(默认) |
m | 多行模式。识别字符串中的行终止符。默认行为是仅在字符串表达式的开头和结尾匹配行终止符。 |
n | . 字符匹配行终止符。默认值是 . 匹配在行结尾停止。 |
u | Unix专用的行尾。只有换行符通过. 、^ 、 $ 匹配运算符会被识别为行结尾。 |
3.特殊字符
模式 | 描述 |
^a | 以……开头。 |
a$ | 以……结尾。 |
. | 匹配任何单个字符(包括回车符和换行符,尽管要在字符串中间匹配这些字符,必须给出m (多行)匹配控制字符或(?m) 模式内修饰符)。 |
a* | 包含* 前面的0个或多个a。 |
(abc)* | 包含* 前面的0个或多个abc 中的字符。 |
a+ | 包含+ 前面的1个或多个a。 |
a? | 包含? 前面的0个或1个a。 |
de | abc | 包含de 或abc 其中的一个即可。 |
{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)字符 |
\ddd | 1~3 位八进制数所代表的字符 |
\xhh | 1~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