MySql正则表达式

    表达式和函数

        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。
        pos:在expr中开始搜索的起始索引,默认为1。
        occurrence:替换第几个匹配项,默认为0,表示替换所有匹配项。
        match_type:字符串匹配模式。见 REGEXP_INSTR()。
        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=]:表示一个等价类,用于匹配所有具有相同排序值的字符。
                [ :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.]]'; 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值