ПОЦЕЛУЙ.Keep It Simple, Stupid.
Предполагая, что вы хотите *
для нуля или более символов и ?
для одного символа (то же самое, что имя файла в большинстве операционных систем), вы можете просто использовать что-то вроде этого(набрано в браузере, поэтому не проверялось, но вы поняли ...)
String filterToRegexExpression(String filter) {
String regexExpression = filter
.replace('?', '.')
.replace("*", "(.*)");
return "^" + regexExpression + "$"; // anchor or not at either end, as desired
}
Затем просто создайте экземпляр регулярного выражения и используйте эту функцию преобразования для преобразования предоставленной пользователем строки фильтра в регулярное выражение.
Выше не очень хорошо работают с другими специальными символами регулярных выражений, но я думаю, что вы можете сделать это, просто избежав чего-либо не алфавитно-цифрового.Я оставляю это как упражнение для читателя.
Я сомневаюсь, что для этого есть готовые библиотеки, так как это потребует определения универсально приемлемого, но несколько более простого синтаксиса регулярных выражений - в то время как потребности приложения(и ожидания от знания пользователя), как правило, немного различаются.В этот момент вы также можете просто попросить их ввести регулярное выражение, для которого имеется множество примеров.