表达式和函数
expr REGEXP pat:如果字符串expr能够匹配指定的正则表达式pat,则返回1,否则返回0。
expr NOT REGEXP pat:相当于 NOT (expr REGEXP pat)。
REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, match_type]]]]):返回与模式pat指定的正则表达式相匹配的字符串在expr中起始索引,如果没有匹配的话返回0。如果expr或pat为null,则返回null。注意索引从1开始。
pos:在expr中开始搜索的起始索引,默认为1。
occurrence:第几个匹配项,默认为1。
return_option:返回哪一种类型的位置。如果是0,返回匹配的子字符串的第一个字符的位置,如果是1,返回匹配的子字符串后面的位置。默认为0。
match_type:字符串匹配模式。可选值为c:区分大小写匹配,i:不区分大小写匹配,m:多行模式,将字符串看作是多行输入,开始和结束标记为人一行的开始和结束,而不是整个字符串的开始和结束。n:单行模式,将字符串看作是单行输入,“.”匹配任意字符包括换行符。u:只使用unix行结束符,只有换行符才会被“.”、“^”和“$”操作符匹配。这些值可同时出现多个,如果出现了矛盾的选项,那么最右边的字符优先级最高。
REGEXP_LIKE(expr, pat[, match_type]):返回与模式pat指定的正则表达式相匹配的字符串在expr中起始索引,如果没有匹配的话返回0。如果expr或pat为null,则返回null。索引从1开始。模式可以是一个可扩展的正则表达式。也可以是字符串表达式或者表中的列。
match_type:字符串匹配模式。见 REGEXP_INSTR()。
REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]]):将expr字符串中匹配模式pat指定的正则表达式的匹配项替换为repl并返回替换后的字符串。如果expr、pat、repl为null,则返回null。
REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]]):将expr字符串中匹配模式pat指定的正则表达式的匹配项替换为repl并返回替换后的字符串。如果expr、pat、repl为null,则返回null。
pos:在expr中开始搜索的起始索引,默认为1。
occurrence:替换第几个匹配项,默认为0,表示替换所有匹配项。
match_type:字符串匹配模式。见 REGEXP_INSTR()。
REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]]):返回expr中与模式pat指定的正则表达式匹配的字符串,如果没有匹配项或者expr、pat为null时返回null。
REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]]):返回expr中与模式pat指定的正则表达式匹配的字符串,如果没有匹配项或者expr、pat为null时返回null。
pos:在expr中开始搜索的起始索引,默认为1。
occurrence:第几个匹配项,默认为1。
match_type:字符串匹配模式。见 REGEXP_INSTR()。
^:在正则表达式的首位表示字符串的开头。如^foo表示以foo开头的字符串。
$:表示字符串的即为。如foo$表示以foo结尾的字符串。
.:表示任意字符,包括换行和回车(多行模式)。
*:表示其前面的字符出现0到多次。如fo*可以匹配f、fo、foooo等。
+:表示其前面的字符至少出现一次。如fo+可以匹配fo、foo、fooooo等。
?:表示其前面的字符出现0到1次。如fo?可以匹配f或fo。
|:表示出现其中的一个。如foo|boo,表示可以匹配foo或boo。
():表示()中的部分做为一个整体。如果(foo|boo)a可以匹配fooa或booa。
{}:表示可能出现的次数,如a{3}只出现三次,a{2,}表示a至少出现2次,a{2,5}表示a出现2到5次。
[]:表示可以匹配其中的任何一个字符,如果[]中的首个字符是^,则匹配不在[]中的字符。
[..]:表示一个字符名称,完整的字符名称列表在regexp/cname.h中。
[[:<:]], [[:>:]]:表示词边界,分别表示词的开始和结束。词是一系列字字符,其前面和后面均没有字字符,字字符是字母数字下划线等。
[=character_class=]:表示一个等价类,用于匹配所有具有相同排序值的字符。
[
alnum 任意字母和数字(同[a-zA-Z0-9])
alpha 任意字母(同[a-zA-Z])
blank 空格和制表符(同[\\t])
cntrl ASCII控制字符(ASCII0到31和127)
digit 任意数字(同[0-9])
graph 图形符号
lower 任意小写字母(同[a-z])
print 图形符号或空格
punct 标点符号,既不在[[:alnum:]]中又不在[[:cntrl:]]中的字符
space 空格、制表、换行、回车([\\f\\n\\r\\t\\v])
upper 任意大写字母(同[A-Z])
xdigit 任意16进制数字(同[a-fA-F0-9])
mysql中字符串使用了C转义语法,所以如果需要在expr和pat中使用“\”时,需要写成“\\”。如果要匹配字符串中的括号等字符时,需要使用“\\”对其进行转义。
表达式语法
正则表达式用于描述一组字符串,常用的符号及组合如下:^:在正则表达式的首位表示字符串的开头。如^foo表示以foo开头的字符串。
$:表示字符串的即为。如foo$表示以foo结尾的字符串。
.:表示任意字符,包括换行和回车(多行模式)。
*:表示其前面的字符出现0到多次。如fo*可以匹配f、fo、foooo等。
+:表示其前面的字符至少出现一次。如fo+可以匹配fo、foo、fooooo等。
?:表示其前面的字符出现0到1次。如fo?可以匹配f或fo。
|:表示出现其中的一个。如foo|boo,表示可以匹配foo或boo。
():表示()中的部分做为一个整体。如果(foo|boo)a可以匹配fooa或booa。
{}:表示可能出现的次数,如a{3}只出现三次,a{2,}表示a至少出现2次,a{2,5}表示a出现2到5次。
[]:表示可以匹配其中的任何一个字符,如果[]中的首个字符是^,则匹配不在[]中的字符。
[..]:表示一个字符名称,完整的字符名称列表在regexp/cname.h中。
[[:<:]], [[:>:]]:表示词边界,分别表示词的开始和结束。词是一系列字字符,其前面和后面均没有字字符,字字符是字母数字下划线等。
[=character_class=]:表示一个等价类,用于匹配所有具有相同排序值的字符。
[
:character_class:]:表示一个字符类,匹配所有属于此类的字符。字符类不能用做范围的端点。使用时要再其外面再加一层[]。常见的字符类有:
alnum 任意字母和数字(同[a-zA-Z0-9])
alpha 任意字母(同[a-zA-Z])
blank 空格和制表符(同[\\t])
cntrl ASCII控制字符(ASCII0到31和127)
digit 任意数字(同[0-9])
graph 图形符号
lower 任意小写字母(同[a-z])
print 图形符号或空格
punct 标点符号,既不在[[:alnum:]]中又不在[[:cntrl:]]中的字符
space 空格、制表、换行、回车([\\f\\n\\r\\t\\v])
upper 任意大写字母(同[A-Z])
xdigit 任意16进制数字(同[a-fA-F0-9])
mysql中字符串使用了C转义语法,所以如果需要在expr和pat中使用“\”时,需要写成“\\”。如果要匹配字符串中的括号等字符时,需要使用“\\”对其进行转义。
简单示例
SELECT 'f' REGEXP '^fo*$','fo' REGEXP '^fo*$','foooo' REGEXP '^fo*$';
SELECT 'f' REGEXP '^fo+$','fo' REGEXP '^fo+$','foooo' REGEXP '^fo+$';
SELECT 'f' REGEXP '^fo?$','fo' REGEXP '^fo?$','foooo' REGEXP '^fo?$';
SELECT 'afoob' REGEXP '^a(foo|boo)b','aboob' REGEXP '^a(foo|boo)b';
SELECT 'fo' REGEXP '^(fo){2}$','fofo' REGEXP '^(fo){2}$','fofofo' REGEXP '^(fo){2}$';
SELECT 'fo' REGEXP '^(fo){1,2}$','fofo' REGEXP '^(fo){1,2}$','fofofo' REGEXP '^(fo){1,2}$';
SELECT 'fo' REGEXP '^(fo){1,}$','fofo' REGEXP '^(fo){1,}$','fofofo' REGEXP '^(fo){1,}$';
SELECT 'HelloRegex' REGEXP '^[[:alpha:]]*$';
SELECT 'Hello\nRegex' REGEXP '(?m)^[[:alpha:]]*$';
SELECT '12(23)' REGEXP '[0-9]*\\(23\\)$','12(23)' REGEXP '[0-9]*(23)$';
SELECT 'this is word test' REGEXP '[[:<:]]word[[:>:]]','this is word test' REGEXP '[[:<:]]word[[:>:]]','this is xword test' REGEXP '[[:<:]]word[[:>:]]';
SELECT 'this is word test' REGEXP '[[:<:]]word','this is wordx test' REGEXP '[[:<:]]word','this is xword test' REGEXP '[[:<:]]word';
SELECT 'this is word test' REGEXP 'word[[:>:]]','this is wordx test' REGEXP 'word[[:>:]]','this is xword test' REGEXP 'word[[:>:]]';
SELECT '~' REGEXP '[[.tilde.]]','|' REGEXP '[[.vertical-line.]]';