Regex неправильно разбивает путь к файлу с номером версии - PullRequest
2 голосов
/ 19 июля 2010

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

/{1,2}([^/{1,2}]+)

Это прекрасно работает для простых путей, таких как /User/folder1/folder2/folder3/.

Однако в более реальном сценарии возникает проблема, если одно из имен папок содержит пунктирный номер версии, например: /User/username/Library/Tomcat/apache-tomcat-6.0.24.

В этом случае Matcher.group(1) вернет apache-tomcat-6.0. вместо apache-tomcat-6.0.24. Я не знаю, почему это происходит; Я считаю, что это не должно.

Есть идеи?

Редактировать

Это работает:

/{1,2}([^/]+)

1 Ответ

5 голосов
/ 19 июля 2010

[^/{1,2}] означает «каждый символ, кроме /, {, 1, ,, 2 и }», поэтому 2 из 24 не совпадает(он будет таким же, как путь a/2 и не связан с номерами версий).Внутри […] большинство символов интерпретируются буквально, и такие конструкции, как {1,2}, не работают.Я думаю, что это должно сработать, если вы просто скажете [^/]+.Я не уверен, почему вы хотите сопоставить два последовательных слеша - просто сопоставьте один слеш и отфильтруйте пустые имена каталогов.

...