регулярное выражение для соответствия строк, которые имеют недопустимые символы имени файла - PullRequest
3 голосов
/ 26 апреля 2010

Я пытался выяснить, как это проклятое регулярное выражение в течение двух часов !!! Сейчас полночь, я должен понять это и лечь спать !!!

String str = new String("filename\\");
if(str.matches(".*[?/<>|*:\"{\\}].*")) {
    System.out.println("match");
}else {
    System.out.println("no match");
}

".*[?/<>|*:\"{\\}].*" - это мое регулярное выражение. Правильно ловит все, кроме обратной косой черты !!! Мне нужно знать, как правильно отразить обратную косую черту, пожалуйста, помогите!

К вашему сведению, нелегальные персонажи, которых я пытаюсь поймать, ? \ / <> | *: " У меня есть рабочее исключение для обратной косой черты

Ответы [ 2 ]

8 голосов
/ 26 апреля 2010

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

if ("ab\\d".matches("[abd\\\\]*") {
  // match
}

Поскольку две обратные косые черты являются выходами Java String, регулярное выражение действительно:

[abc\\]*

и \\ требуется в регулярном выражении, чтобы избежать обратной косой черты.

3 голосов
/ 19 ноября 2014

Я знаю, что это довольно старый вопрос на данный момент, но я нашел его во время работы над той же проблемой, и я подумал, что будущие читатели могут найти это полезным:

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

^(\s+.*|.*[\\/:\"?*|<>].*|.*\s+||.*\.)$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...