栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

理解`(ds|hr)?+.+`

理解`(ds|hr)?+.+`

在hive/spark sql可以支持对列名进行正则匹配,其中给出这样一个例子:

SELECt `(ds|hr)?+.+` FROM sales

这个查询会查找除了ds和hr之外的所有列。这个正则实在是太过少见,查阅了很多资料才理解了。

首先要正确拆分(ds|hr)?+.+,(ds|hr)?+是一段,后面.+是第二段。这里面难点在于(ds|hr)?+的意义,子匹配(也就是括号)后面跟了两个量词?+,这是特殊用法,按照一般的量词意义是无法理解的,这个用法就是占有优先量词。正则的量词包括忽略优先、匹配优先、占有优先,占有优先是最大匹配后不“交还”,这点和匹配优先相反。这个例子的正则表达式,第一段在匹配到ds或者hr后,第二段的.+代表任意字符必须出现一次或多次,这样ds和hr就匹配不上了,而其他列名的由于第一段(ds|hr)?+可以0匹配,第二段也满足,所以却能够匹配上。这样就巧妙的实现了——匹配ds和hr之外的所有列名了。

支持占有优先的正则表达式的语言并不多,java算一个。你Get到了吗?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/327365.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号