У меня есть система, где я запрашиваю документы на сервере 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"]
По сути, язык запросов представляет собой список предикатов, которые можно комбинировать с ИЛИ ("|") или И (без разделителя). Каждый предикат является ограничением на поле. Ограничение может быть =, <,>, <=,> =, in и т. Д. ... Везде, где это имеет смысл, могут быть пробелы.
Я немного потерян между Regexp, StringTokenizer, StreamTokenizer и т. Д ... и я застрял с Java 1.4, так что нет парсера ...
Кто может указать мне правильное направление?
Спасибо!