HBase中正则过滤表达式与JAVA正则表达式不一致问题的分析和解决

HBase提供了丰富的查询过滤功能。

比如说它提供了RegexStringComparator这样的函数,可以实现按照正则表达式进行过滤。它可以有效地弥补向前缀查询这样的机制,从而可以使hbase也支持了类似于like查询之类的功能。

然而在实践过程中,很多人都会遇到一个问题,对于里面的正则表达式没有过于详细的介绍,一直以为是直接从JAVA等一些标准的正则表达式演化过来。直接拿过来用就可以。

但是,这只是美好的猜测而已。

如stackoverflow上的这篇问题一样。http://stackoverflow.com/questions/13997794/java-regular-expression-for-hbase-scan-filter-not-working。

如现在想对一串数字字符进行查询,如201609282222633_1333222222_22222,

如果直接照用JAVA的正则表达式如“^20160928+\\d{6}_133\\d{4,}_\\d{0,}$",这样在JAVA中肯定可以快速编译通过,然而在hbase查询中却通不过。

经过一番认真查看,才发现HBASE中的正则表达式略微有些区别。

最重要还是其源码中自带的一个小例子。如

* ValueFilter vf = new ValueFilter(CompareOp.EQUAL,

* new RegexStringComparator(

* // v4 IP address

* "(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3,3}" +

* "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(\\/[0-9]+)?" +

* "|" +

* // v6 IP address

* "((([\\dA-Fa-f]{1,4}:){7}[\\dA-Fa-f]{1,4})(:([\\d]{1,3}.)" +

* "{3}[\\d]{1,3})?)(\\/[0-9]+)?"));

* </pre>

*/

这个类的源码中对于IP地址的查询中,发现其\\d这样的字符的设置加了一个方括号,加上,果然顺利通过。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java编程

java web开发——购物车功能实现

之前没有接触过购物车的东东,也不知道购物车应该怎么做,所以在查询了很多资料,总结一下购物车的功能实现。

1K20
来自专栏Java编程

Java基础—String、StringBuffer、StringBuilder

我有一个微信公众号,经常会分享一些Java技术相关的干货。如果你喜欢我的分享,可以用微信搜索“Java团长”或者“javatuanzhang”关注。

39600
来自专栏Java编程

写出优质Java代码的4个技巧

如果现在要求对你写的Java代码进行优化,那你会怎么做呢?作者在本文介绍了可以提高系统性能以及代码可读性的四种方法,如果你对此感兴趣,就让我们一起来看看吧。

1.2K00
来自专栏Java编程

架构师速成——如何高效编程 for java

赵云大喝一声,挺枪骤马杀入重围,左冲右突,如入无人之境。那枪浑身上下,若舞梨花;遍体纷纷,如飘瑞雪。

34700
来自专栏Java编程

给Java程序猿们推荐一些值得一看的好书

"学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处:

1.2K20
来自专栏Java编程

Java单例模式详解

java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。

60800
来自专栏Java编程

Java IO详解

初学Java时,一直搞不懂Java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂。而且没有结合到java7 的最新技术,所以自己来整理一...

77600
来自专栏Java编程

15个顶级Java多线程面试题及答案

在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务...

1.8K10
来自专栏Java编程

Java多线程技能

我有一个微信公众号,经常会分享一些Java技术相关的干货。如果你喜欢我的分享,可以用微信搜索“Java团长”或者“javatuanzhang”关注。

43810
来自专栏Java编程

Java架构师学习路线

java架构师,首先要是一个高级java攻城狮,熟练使用各种框架,并知道它们实现的原理。jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么...

1.8K00

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励