目录

1. like的使用详解

2.rlike使用详解

3. regexp的用法和rlike一样

4. 源码分析

5. 总结

6. 练习


1. like的使用详解

A like B
//A 是字符串,B是表达式
  • 表示能否用B去完全匹配A的内容,换句话说能否用B这个表达式去表示A的全部内容,注意这个和rlike是有区别的。
  • 返回的结果是True/False.
  • B只能使用简单匹配符号_和%,”_"表示任意单个字符,字符“%”表示任意数量的字符like的匹配是按字符逐一匹配的,使用B从A的第一个字符开始匹配,所以即使有一个字符不同都不行。

2.rlike使用详解

A rlike B,表示B是否在A里面即可。而A like B,则表示B是否是A.

B中的表达式可以使用Java中全部正则表达式,具体正则规则参考Java,或者其他标准正则语法。

^

表示一个字符串或者行的开头

[a-z]

表示一个字符范围,匹配从a到z的任何字符

[0-9]

表示一个字符范围,匹配从0到9的任何字符

[a-zA-Z]

这个变量匹配从a到z或A到Z的任何字符。请注意,你可以在方括号内指定的字符范围的数量没有限制,您可以添加想要匹配的其他字符或者范围。

[^a-z]

这个变量匹配不在a到z范围内的任何字符。请注意,字符^用来否定字符范围,它在方括号内的含义与它的方括号外表示开始的含义不同。

[a-z]*

表示一个字符范围,匹配从a到z的任何字符0次或多次

[a-z]+

表示一个字符范围,匹配从a到z的任何字符1次或多次

.

匹配任意一个字符

\.

表示句点字符。

$

表示一个字符串或行的结尾

 

3. regexp的用法和rlike一样

4. 源码分析

like、rlike、regexp使用的UDF如图

hive on条件中rlike hive中的rlike_hive on条件中rlike

由图可见rlike和regexp使用相同的UDF类都为UDFRegexp.class,不同于like使用UDFLike.class;

5. 总结

like与rlike的使用对比总结:rlike功能和like功能大致一样,like是后面只支持简单表达式匹配(_%), 而rlike则支持标准正则表达式语法。所以如果

6. 练习

Leetcode1517 查找拥有有效邮箱的用户