RLIKE操作符规范介绍 |
您所在的位置:网站首页 › regex_like函数怎么用 › RLIKE操作符规范介绍 |
RLIKE是MaxCompute SQL提供的一种基于PCRE(Perl Compatible Regular Expressions)规范的操作符,支持在MaxCompute SQL语句中对文本进行更精确、更复杂的模式匹配或替换。本文介绍了RLIKE支持的元字符、POSIX字符组、中文字符组、转义字符和相关字符的使用示例。 元字符RLIKE操作符支持一系列元字符,下表列出了常见的元字符: 元字符 说明 ^ 行首。 $ 行尾。 . 任意字符。 * 匹配前面的子表达式0次或多次。 + 匹配前面的子表达式1次或多次。 ? 匹配前面的子表达式0次或1次。 ? 匹配修饰符,当该字符跟在任何一个其他限制符 (* 、+、?、 {n}、 {n,}、 {n,m})后面时,匹配模式为非贪婪模式。非贪婪模式尽可能少的匹配所搜索的字符串, 而默认的贪婪模式则尽可能多的匹配所搜索的字符串。 A|B A或B。 (abc)* 匹配abc序列0次或多次。 {n}或{m,n} 匹配的次数。 [ab] 匹配括号中的任一字符。模式匹配a或b。 [a-d] 匹配a、b、c、d任一字符。 [^ab] ^表示非,匹配任一非a非b的字符。 [::] 详情请参见下文的POSIX字符组。 \ 转义符,详情请参见下文的转义符。 \n n为数字1~9,表示后向引用。 \d 数字。 \D 非数字。 关于更多的正则表达式的使用说明,详情请参见PCRE官网文档。 如果匹配结果不符合预期,可能是需要做转义,详情请参见转义字符。 使用示例示例:匹配字符串的开头和结尾 select 'aa123bb' rlike '^a'; -- 匹配字符串aa123bb的开头是否为a,返回true select 'aa123bb' rlike '^a.*b$'; -- 匹配字符串aa123bb的开头是否为a、结尾是否为b,运行返回true select 'footerbar' rlike 'foo(.*?)(bar)'; -- 返回true示例:使用转义符匹配含特殊字符的字符串 select 'a+b' rlike 'a\\\+b'; -- 返回true示例:匹配任一字符 select 'cc123bb' rlike '^[a-d]'; -- 匹配字符串cc123bb的开头是否是a~d中的任意一个字符,返回true示例:匹配数字、非数字字符 select '123bb' rlike '^\\\d'; -- 匹配字符串123bb的开头是否是数字字符,返回true select 'cc123bb' rlike '^\\\D'; -- 匹配字符串cc123bb的开头是否是非数字字符,返回true字符组POSIX字符组字符组 说明 范围 [[:alnum:]] 字母字符和数字字符 [a-zA-Z0-9] [[:alpha:]] 字母 [a-zA-Z] [[:ascii:]] ASCII字符 [\x00-\x7F] [[:blank:]] 空格字符和制表符 [ \t] [[:cntrl:]] 控制字符 [\x00-\x1F\x7F] [[:digit:]] 数字字符 [0-9] [[:graph:]] 空白字符之外的字符 [\x21-\x7E] [[:lower:]] 小写字母字符 [a-z] [[:print:]] [:graph:]和空白字符 [\x20-\x7E] [[:punct:]] 标点符号 [][!”#$%&’()*+,./:;? @\^_`{|}~-] [[:space:]] 空白字符 [ \t\r\n\v\f] [[:upper:]] 大写字母字符 [A-Z] [[:xdigit:]] 十六进制字符 [A-Fa-f0-9] 说明MaxCompute不支持\f和\v,具体支持的转义符请参见转义字符。 中文字符组中文字符组细分 范围 包括汉字在内的双字节字符 [^\\x{00}-\\x{ff}] 中文字符 [\\x{4e00}-\\x{9fa5}] 中文标点 中文标点无统一的编码范围,您可以在搜索引擎上搜索中文标点符号Unicode码,然后结合运算符来逐个排除。 例如句号(。)对应正则表达式为[\\x{3002}]。执行select * from values ('你好。'),('nihao!') t(d) where d rlike '[\\x{3002}]';返回结果为你好。。 说明如果要匹配单引号,可以用unicode0027,对应正则表达式为 [\\x{0027}]。 转义符RLIKE操作符支持反斜线\作为转义符,因此正则表达式的模式中出现的\都要进行二次转义。 使用示例示例1 正则表达式要匹配字符串a+b,其中+是正则中的一个特殊字符,因此要用转义的方式表达。在正则表达式引擎中的表达方式是a\\+b,由于还要解释一层转义,因此能够匹配该字符串的表达式是a\\\+b。 select 'a+b' rlike 'a\\\+b'; +------+ | _c1 | +------+ | true | +------+示例2 在某些情况下,如果要匹配字符\, 在正则表达式引擎中\是一个特殊字符,因此要表示为\\,由于还要解释一层转义,因此写成\\\\。 select 'a\\b', 'a\\b' rlike 'a\\\b'; +-----+------+ | _c0 | _c1 | +-----+------+ | a\b | false | +-----+------+ select 'a\\b', 'a\\b' rlike 'a\\\\b'; +-----+------+ | _c0 | _c1 | +-----+------+ | a\b | true | +-----+------+说明在MaxCompute SQL中写a\\b,而在输出结果中显示a\b,同样是因为MaxCompute会对表达式进行转义。 示例3 如果字符串中有制表符TAB,系统在读入\t这两个字符时,已经将其存为一个字符,因此在正则表达式的模式中它也是一个普通的字符。 select 'a\tb', 'a\tb' rlike 'a\tb'; +---------+------+ | _c0 | _c1 | +---------+------+ | a b | true | +---------+------+ |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |