通用Java模式识别库 - 类似于List <object> </object>的regexp

时间:2009-08-08 22:09:33

标签: java design-patterns

是否有一个库可以让我为对象列表编写类似regexp的查询,就像java.util.regexp匹配字符串一样,字符串在概念上就像字符列表一样?

我希望能够使用具有贪婪/保守量词的模式,识别匹配中的组等。显然,我必须提供用于将查询令牌与列表中的对象进行匹配的代码。

我不只是想节省时间而不是编写自己的查询解析器。我知道regexp实现(针对字符串)是一个研究很好的领域,Sun的java.util.regex很久以前肯定已经优化了它。我编写的任何内容都不会那么高效,我可能需要处理很长的列表(但非常简单的查询)。

谢谢!

3 个答案:

答案 0 :(得分:2)

Quaere之类的东西。 从他们的网站:

Quaere是一个开源的,可扩展的框架,它为Java应用程序添加了一个让人想起SQL的查询语法。 Quaere允许您使用通用的,富有表现力的语法对多个集合和其他可查询资源进行过滤,枚举和创建投影。

答案 1 :(得分:1)

如果列表中存储的对象有限,则可以在列表中的对象和该对象唯一的Unicode字符之间创建一个Map。因此,根据您的列表,您将生成一个唯一代表您列表的字符串。

之后,您可以针对生成的字符串使用现有的正则表达式包,并匹配您想要的任何内容。之后,您可以映射回列表。

答案 2 :(得分:0)

这是一个有趣的想法,但正则表达式的力量来自于你可以做出的概括,你需要定义通过一组对象来概括搜索的意义。

我认为把一些东西放在一起就不会太难了,比如说,过滤一个对象列表是否包含属性“X”,或者是一个值为“Y”的属性(我认为这是一个简单的版本)在apache commons中,可能在beanutils或commons-collections中。但那么你会如何概括?一个明显的概括可能是搜索字符串的正则表达式,但你可能想要更像“包含属性X或属性Y *”的东西。我还可以想象按类别或子集合的种类属性进行搜索。

作为一个抽象的想法,它真的很有趣。但是,如果您正在尝试解决特定的开发问题,那么您可能会考虑更有限的事情。你想做什么样的搜索?