RegularExpression вопрос для сопоставления строкового литерала из пользовательского ввода - PullRequest
1 голос
/ 12 марта 2011

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

mylog.log MyLog-1.log MyLog-2.log

        public boolean accept(File file) {
            Pattern pattern = Pattern.compile(filenameWithoutExtension + "-*[0-9]*." + extension);
            Matcher matcher = pattern.matcher(file.getName());
            return matcher.matches();
        }

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

MyLog (копия) .log

Я бы хотел заключить в filenameWithoutExtension нотацию с надписью «Сопоставьте эту строку, игнорируя в ней все, что в противном случае могло бы быть синтаксисом сопоставления с образцом.

1 Ответ

2 голосов
/ 12 марта 2011

Использование Pattern.quote .

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