Я использую регулярное выражение для имен файлов изображений. Основная причина, по которой я использую RegEx, заключается в предотвращении нескольких файлов для той же цели.Специальный синтаксис регулярного выражения в Java
Синтаксис для имен файлов может быть либо:
1) img_0F_16_-32_0.png
2) img_65_32_x.png
Как вы могли заметить, «IMG_» является общим префиксом. Далее следует двузначное шестнадцатеричное число. После другого подчеркивания появляется целое число, которое должно быть силой двух, где-то между 1 и 512. Еще одно подчеркивание следующее.
Хорошо, так что, мое регулярное выражение работает безупречно. Остальное - это то, с чем у меня возникают проблемы: Потому что может следовать либо пара целых координат (может быть 0), разделенных символом подчеркивания, либо x. После этого наступает финальный «.png». Готово.
Теперь главная проблема, которую я испытываю, заключается в том, что оба варианта должны быть возможны, , а также очень важно, чтобы не было дублирующих координат. Самое главное, целые числа, как положительные, так и отрицательные, могут never начать с одного или нескольких нулей! Это будет производить дупликации, как:
401 = 00401
-10 = -0010
Это моя первая попытка:
img_[0-9a-fA-F]{2}_(1|2|4|8|16|32|64|128|256|512)_([-]?[1-9])?[0-9]*_([-]?[1-9])?[0-9]*[.]png
Спасибо за вашу помощь заранее,
Том С.
+1. Я нахожу, что код разбора строк часто быстрее писать, легче понять и легче отлаживать, если вы просто пишете его как обычный код, а не пытаетесь использовать регулярное выражение для каждой цели. –
На самом деле, я использую регулярное выражение в фильтре имени файла. это важно, потому что каталог, в который я загружаю файлы, содержит примерно ~ 2500 файлов. –
Если вы имеете дело с этим количеством файлов, у вас есть еще одна причина не использовать регулярное выражение. Это медленнее, чем простой парсер. – BalusC