通用Java模式识别库-类似于列表的regexp<;对象>;

通用Java模式识别库-类似于列表的regexp<;对象>;,java,design-patterns,Java,Design Patterns,是否有一个库可以让我为对象列表编写类似regexp的查询,就像java.util.regexp与字符串匹配一样,字符串在概念上类似于字符列表 我希望能够使用贪婪/保守量词的模式,识别匹配中的组,等等。显然,我必须提供代码,以便将查询标记与列表中的对象进行匹配 我不只是想节省时间,也不想编写自己的查询解析器。我知道regexp实现(针对字符串)是一个研究得很好的领域,Sun的java.util.regex在很久以前就已经进行了优化。我写的任何东西都不会有这么高的效率,而且我可能必须处理相当长的列表

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

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

我不只是想节省时间,也不想编写自己的查询解析器。我知道regexp实现(针对字符串)是一个研究得很好的领域,Sun的java.util.regex在很久以前就已经进行了优化。我写的任何东西都不会有这么高的效率,而且我可能必须处理相当长的列表(但非常简单的查询)


谢谢

如果列表中存储的对象有限,一个想法是在列表中的对象和该对象特有的Unicode字符之间创建一个映射。因此,给定您的列表,您将生成唯一表示列表的字符串

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

类似的内容。 从他们的网站:


Quaere是一个开源、可扩展的框架,它向Java应用程序添加了类似SQL的查询语法。Quaere允许您使用通用的表达性语法对大量集合和其他可查询资源进行筛选、枚举和创建投影。

这是一个有趣的想法,但正则表达式的威力来自您可以进行的概括,您需要定义通过对象集合概括搜索的含义

我想把一些东西放在一起不会太困难,比如说,根据对象是否包含属性“X”或值为“Y”的属性过滤对象列表(我认为apache commons中有一个简单的版本,可能在beanutils或commons集合中)。那你怎么概括呢?一个明显的泛化可能是搜索字符串时的正则表达式,但您可能需要类似“包含属性X或属性Y*”的内容。我还可以想象按类类型或子集合总体的属性进行搜索


作为一个抽象的概念,它真的很有趣。但是,如果您试图解决一个特定的开发问题,您可能会想到一些更有限的东西。你想做什么样的搜索

不确定您所说的对象列表的类regexp查询是什么意思。您能否详细说明并提供几行代码,说明您希望它如何工作?这是一个非常有趣的想法,谢谢!看起来它可能很好地解决了我的问题。请记住,您必须找到一种方法,只将每个对象映射到一个唯一的角色。这意味着为对象创建一个类似散列的函数。另外,使用16位字符表示列表中只能有65535个唯一对象。这可能是一个限制因素。对于我的实际用例来说,这不是一个问题。如果我在实现一般情况,我可以根据需要将对象映射到由两个或三个字符组成的唯一序列。我还将使用对象标识映射,避免与哈希和equals()混淆。再次感谢!这不是我所需要的,因为类似SQL的语法不能捕获原始集合中的顺序(尽管它可以对所选子集进行排序)。SQL对于“selecta-followers-b”,regexp“ba”没有等价物。我实际上是在编写一个自底向上的上下文无关解析器。这样做很有趣(如果效率不高的话),只需指定语法规则并让解析器在任何可能的地方机会主义地应用它们。但是我将源字符串放在了令牌对象的树(嵌套列表)中,然后我想使用regexps。现在多亏了Sawas的想法,我刚刚实现了这个想法(仅约20 LOC),我可以编写:mapTokens(解析器,“[^]*”,ParenGroup);还有,我的规则是将ParenOpen…ParenClose词法标记组组合成ParenGroup标记。