Универсальная библиотека распознавания образов Java - например, регулярные выражения для List <Object> - PullRequest
3 голосов
/ 09 августа 2009

Существует ли библиотека, которая позволяла бы мне писать запросы в виде регулярных выражений для списков объектов, как java.util.regexp сопоставляет строки, которые концептуально похожи на списки символов?

Я хочу иметь возможность использовать шаблоны с жадными / консервативными квантификаторами, идентифицировать группы в совпадениях и т. Д. Очевидно, мне нужно будет предоставить код для сопоставления токена запроса с объектом в списке.

Я не просто пытаюсь сэкономить время, не пишу свой собственный анализатор запросов. Я знаю, что реализации регулярных выражений (против строк) - это хорошо изученная область, и java.util.regex от Sun, безусловно, давно его оптимизировал. Все, что я пишу, будет не столь эффективным, и мне, возможно, придется обрабатывать довольно длинные списки (но довольно простые запросы).

Спасибо!

Ответы [ 3 ]

2 голосов
/ 09 августа 2009

Что-то вроде Quaere . С их сайта:

Quaere - это расширяемая среда с открытым исходным кодом, которая добавляет синтаксис запросов, напоминающий SQL, в приложения Java. Quaere позволяет фильтровать, перечислять и создавать прогнозы по ряду коллекций и других запрашиваемых ресурсов с использованием общего выразительного синтаксиса.

1 голос
/ 09 августа 2009

Идея, если объекты, которые вы храните в списке, ограничена, состоит в том, чтобы создать карту между объектом в списке и уникальным для этого объекта символом Unicode. Поэтому, учитывая ваш список, вы сгенерируете строку символов, которые уникально представляют ваш список.

После этого вы можете использовать существующие пакеты регулярных выражений для сгенерированной строки и сопоставить все, что пожелаете. После этого вы можете вернуться к списку.

0 голосов
/ 09 августа 2009

Это интересная идея, но сила регулярных выражений исходит от обобщений, которые вы можете сделать, и вам нужно определить, что будет означать обобщение поиска по коллекции объектов.

Полагаю, было бы не сложно составить что-то, что, скажем, отфильтровывало список объектов по тому, содержали ли они свойство "X" или свойство, значение которого равно "Y" (я думаю, что есть простая версия об этом в Apache Commons, вероятно, в beanutils или общинных коллекций). Но тогда как бы вы обобщили? Одним очевидным обобщением могут быть регулярные выражения при поиске строк, но вы, вероятно, захотите что-то более похожее на «содержит свойство X или свойство Y *». Я также могу представить поиск по типу класса или свойствам совокупностей подколлекций.

Как абстрактная идея, это действительно интересно. Однако, если вы пытаетесь решить конкретную проблему разработки, вы можете подумать о чем-то более ограниченном. Какие поиски вы думаете сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...