Регулярное выражение для соответствия частей URL - PullRequest
0 голосов
/ 05 ноября 2018

Мне нужна помощь в создании регулярного выражения для соответствия определенным частям URL с использованием Java. В частности, протокол, имя хоста и порт.

Например, если у меня есть URL http://hq.dev.test.domain:8080/ip/CreateRegex и Я хотел бы вытащить следующее:

[Protocol]=http
[Hostname]=hq.dev.test.domain
[Port]=8080

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

var getProtocol= ^((http)?:\\/\\/).*\\w*(CreateRegex)$

Ответы [ 2 ]

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

Есть ли какая-либо конкретная причина использовать регулярные выражения в вашем случае? Если нет, вы должны использовать URL для разбора строки.

URL url = new URL("http://hq.dev.test.domain:8080/ip/CreateRegex");
System.out.println("[Protocol]=" + url.getProtocol());
System.out.println("[Hostname]=" + url.getHost());
System.out.println("[Port]=" + url.getPort());

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

Pattern regex = Pattern.compile("^(\\w+)://([^:/]*)(?::(\\d+))?.*");
Matcher regexMatcher = regex.matcher("http://hq.dev.test.domain:8080/ip/CreateRegex");
if (regexMatcher.find()) {
    System.out.println("[Protocol]=" + regexMatcher.group(1));
    System.out.println("[Hostname]=" + regexMatcher.group(2));
    System.out.println("[Port]=" + regexMatcher.group(3));
}
0 голосов
/ 05 ноября 2018

Используйте класс java.net.URL для разбора

URL url = new URL("https://google.com:443/search");
System.out.println(url.getProtocol()); // https
System.out.println(url.getHost()); // google.com
System.out.println(url.getPort()); // 443
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...