Простые регулярные выражения для извлечения папок - PullRequest
3 голосов
/ 01 октября 2010

Какой самый эффективный способ охватить все случаи для получения folder1/folder22

из:

http://localhost:8080/folder1/folder22/file.jpg
or
http://domain.com/folder1/folder22/file.jpg
or
http://127.0.0.0.1:8080/folder1/folder22/file.jpg

, поэтому может быть одна или несколько папок / подпапок,В основном я хотел бы убрать доменное имя и порт, если они доступны, и имя файла в конце.

Спасибо за ваше время.

Ответы [ 4 ]

3 голосов
/ 01 октября 2010

А как насчет URL класса и getPath()?

Может быть, это не самый эффективный способ, но один из самых простых, я думаю:

String[] urls = { 
  "http://localhost:8080/folder1/folder22/file.jpg", 
  "http://domain.com/folder1/folder22/file.jpg",
  "http://127.0.0.0.1:8080/folder1/folder22/file.jpg" };
for (String url : urls)
  System.out.println(new File(new URL(url).getPath()).getParent());
1 голос
/ 01 октября 2010

Вероятно, для этого вам следует использовать анализатор URL-адресов Java, но если он имеет в качестве регулярного выражения:

\b(?=/).*(?=/[^/\r\n]*)

будет соответствовать /folder1/folder22 во всех ваших примерах.

try {
    Pattern regex = Pattern.compile("\\b(?=/).*(?=/[^/\r\n]*)");
    Matcher regexMatcher = regex.matcher(subjectString);
    if (regexMatcher.find()) {
        ResultString = regexMatcher.group();
    } 

Пояснение:

\b: Утвердить положение на границе слова (это будет работать до одиночной косой черты, но не между косыми чертами или после :)

(?=/): Утверждение, что следующий символ - косая черта.

.*: сопоставить что угодно до ...

(?=/[^/\r\n]*): ... следует ровно одна последняя / (и все остальное, кроме косой черты или перевода строки).

0 голосов
/ 01 октября 2010

Лучший способ получить последние два каталога из URL-адреса:

preg_match("/\/([^\/]+\/){2}[^\/]+$/", $path, $matches);

Если найдено совпадение, И $ match [1] всегда будет содержать то, что вы хотите, независимо от имени файла с полным URL.

0 голосов
/ 01 октября 2010
^.+/([^/]+/[^/]+)/[^/]+$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...