Конвертировать фильтр в регулярное выражение - PullRequest
1 голос
/ 16 марта 2012

Я искал, есть ли какая-нибудь библиотека java-конвертеров для преобразования простых фильтров, например, *something* в регулярное выражение типа (.*)something(.*).Вариант использования: конечные пользователи могут создавать регулярные выражения, не зная всего синтаксиса регулярных выражений.Кто-нибудь знает, есть ли какая-либо работа, или кто-нибудь знает, как ее выполнить.

Ответы [ 2 ]

1 голос
/ 16 марта 2012

ПОЦЕЛУЙ.Keep It Simple, Stupid.

Предполагая, что вы хотите * для нуля или более символов и ? для одного символа (то же самое, что имя файла в большинстве операционных систем), вы можете просто использовать что-то вроде этого(набрано в браузере, поэтому не проверялось, но вы поняли ...)

String filterToRegexExpression(String filter) {
    String regexExpression = filter
        .replace('?', '.')
        .replace("*", "(.*)");
    return "^" + regexExpression + "$"; // anchor or not at either end, as desired
}

Затем просто создайте экземпляр регулярного выражения и используйте эту функцию преобразования для преобразования предоставленной пользователем строки фильтра в регулярное выражение.

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

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

0 голосов
/ 16 марта 2012

Используйте этот подход для замены всех символов.

вам нужно:

jakarta-regexp-1.5.jar

странный способ реализации с использованием build.properties или web.xml

<replaceregexp file="${src}/build.properties"
                         match="OldProperty=*"
                         replace="NewProperty=(.*)"
                         byline="true"/>

заменяет вхождения имени свойства «OldProperty» на «NewProperty» в файле свойств, сохраняя существующее значение в файле $ {src} /build.properties

см. http://www.jajakarta.org/ant/ant-1.6.1/docs/en/manual/OptionalTasks/replaceregexp.html для более

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