Java регулярное выражение для извлечения пароля из пути URL между двумя последними косыми чертами - PullRequest
0 голосов
/ 05 ноября 2018

как я могу извлечь пароль из следующих ссылок, используя код Java:

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

http://example.com:8080/files/user1/password123/12351.png
http://example.com:8080/user1/password123/956253.png
http://example.com:8080/user1/password123/3652

мне нужно получить пароль: password123

В настоящее время я использую:

String url = "http://example.com:8080/files/user1/password123/12351.png";
String[] split = url .split("/");
//i reverse the array
String[] temp = new String[split.length];
for(int i = split.length - 1; i > -1; i --){
        temp[split.length - i -1] = split[i];
}
split = temp;
String password = split[1];

но это зависит от индекса массива.

есть ли для этого код регулярного выражения?

привет

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

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

String url = "http://example.com:8080/files/user1/password123/12351.png";
String pattern = ".*\\/([^\\/]+)\\/[\\w\\.]+";
Pattern r = Pattern.compile(pattern);
String pwd = "";
Matcher m = r.matcher(line);
if (m.find()) {
    pwd = m.group(1); 
}
else {
    System.out.println("NO MATCH");
}
0 голосов
/ 05 ноября 2018

Регулярные выражения являются тяжелым решением, поэтому я предпочитаю избегать их использования, если они не нужны.

Вместо этого вы можете просто найти последний / символ, а затем искать / символ перед этим:

int lastSlash = url.lastIndexOf('/');
int secondToLastSlash = url.lastIndexOf('/', lastSlash - 1);
String password = url.substring(secondToLastSlash + 1, lastSlash);

password = URLDecoder.decode(password, "UTF-8");

Последняя строка необходима, потому что пароль может содержать символы, которые не могут быть непосредственно представлены в URL. Например, пароль sword{fish} будет указан в URL как sword%7bfish%7d.

0 голосов
/ 05 ноября 2018

Если структура ваших данных всегда такая, а пароль - это всегда последние 2 слэша, вы можете просто использовать split и использовать длину массива минус 2.

Помимо проверки того, что индекс существует и т. Д., Вы можете использовать:

String url = "http://example.com:8080/files/user1/password123/12351.png";
String[] split = url.split("/");        
System.out.println(split[split.length - 2]);

Демо

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