gpt4 book ai didi

java - 如何在 Java 中解析基本查询(类似于 Google 数据)?

转载 作者:行者123 更新时间:2023-12-02 00:56:09 24 4
gpt4 key购买 nike

我有一个系统,可以在 REST/Atom 服务器上查询文档。这些查询受到 GData 的启发,如下所示:

http://server/base/feeds/documents?bq=[type in {'news'}]

我必须解析“bq”参数才能知道将返回哪种类型的文档,而无需实际执行查询。例如,

bq=[type = 'news']                      ->  return ["news"]
bq=[type in {'news'}] -> return ["news"]
bq=[type in {'news', 'article'}] -> return ["news", "article"]
bq=[type = 'news']|[type = 'article'] -> return ["news", "article"]
bq=[type = 'news']|[title = 'My Title'] -> return ["news"]

基本上,查询语言是可以用 OR(“|”)或 AND(无分隔符)组合的谓词列表。每个谓词都是对一个字段的约束。约束可以是 =、<、>、<=、>=、in 等...任何有意义的地方都可以有空格。

我在 Regexp、StringTokenizer、StreamTokenizer 等之间有点迷失……而且我被 Java 1.4 困住了,所以没有解析器……

谁能给我指出正确的方向?

谢谢!

最佳答案

正确的方法是使用解析器生成器,如 Antlr , JFlexJavaCC .

一个快速而肮脏的方法是:

String[] disjunctedPredicateGroups = query.split("\|");
List<String[]> normalizedPredicates = ArrayList<String[]>;
for (String conjunction : disjunctedPredicateGroups ) {
normalizedPredicates.add(conjunction.split("\[|\]"));
}
// process each predicate

关于java - 如何在 Java 中解析基本查询(类似于 Google 数据)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/200836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com