Получение частей URL (Regex) - PullRequest
       104

Получение частей URL (Regex)

123 голосов
/ 26 августа 2008

Учитывая URL (одна строка):
http://test.example.com/dir/subdir/file.html

Как извлечь следующие части с помощью регулярных выражений:

  1. Субдомен (тест)
  2. Домен (example.com)
  3. Путь без файла (/ dir / subdir /)
  4. Файл (file.html)
  5. Путь с файлом (/dir/subdir/file.html)
  6. URL без пути (http://test.example.com)
  7. (добавить любую другую, которая, по вашему мнению, будет полезна)

Регулярное выражение должно работать правильно, даже если я введу следующий URL:

http://example.example.com/example/example/example.html

Ответы [ 24 ]

0 голосов
/ 24 декабря 2015
String s = "https://www.thomas-bayer.com/axis2/services/BLZService?wsdl";

String regex = "(^http.?://)(.*?)([/\\?]{1,})(.*)";

System.out.println("1: " + s.replaceAll(regex, "$1"));
System.out.println("2: " + s.replaceAll(regex, "$2"));
System.out.println("3: " + s.replaceAll(regex, "$3"));
System.out.println("4: " + s.replaceAll(regex, "$4"));

Обеспечит следующий вывод:
1: https://
2: www.thomas-bayer.com
3: /
4: axis2 / services / BLZService? Wsdl

Если вы измените URL на
String s = "https://www.thomas -bayer.com? Wsdl = qwerwer & ttt = 888 "; вывод будет следующим:
1: https://
2: www.thomas-bayer.com
3:?
4: wsdl = qwerwer & ttt = 888

наслаждаться ..
Йоси Лев

0 голосов
/ 17 июля 2009

регулярное выражение для получения пути URL без файла.

url = 'http://domain/dir1/dir2/somefile' url.scan (/ ^ (http://[^/]+)((?:/[^/]+)+(?=/))?/?(?:[^/]+)?$/i).to_s

Может быть полезно добавить относительный путь к этому URL.

0 голосов
/ 26 августа 2008

Использование http://www.fileformat.info/tool/regex.htm регулярного выражения hometoast прекрасно работает.

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

Например, у меня есть этот URL, и у меня есть перечисление, в котором перечислены все поддерживаемые URL в моей программе. Каждый объект в перечислении имеет метод getRegexPattern, который возвращает шаблон регулярного выражения, который затем будет использоваться для сравнения с URL-адресом. Если определенный шаблон регулярного выражения возвращает true, то я знаю, что этот URL поддерживается моей программой. Таким образом, каждое перечисление имеет свое собственное регулярное выражение в зависимости от того, где оно должно выглядеть внутри URL.

Предложение Hometoast великолепно, но в моем случае, думаю, это не поможет (если я не скопирую и вставлю одно и то же регулярное выражение во всех перечислениях).

Вот почему я хотел, чтобы ответ дал регулярное выражение для каждой ситуации отдельно. Хотя +1 за домашнюю. ;)

0 голосов
/ 26 августа 2008

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

Если у вас есть возможности для нехватки совпадений, вы можете изменить выражение hometoast так, чтобы подвыражения, которые вам не интересны в захвате, были настроены следующим образом:

(?:SOMESTUFF)

Вы все равно должны были бы скопировать и вставить (и немного изменить) регулярное выражение в несколько мест, но это имеет смысл - вы не просто проверяете, существует ли подвыражение, а скорее, существует ли оно как часть URL . Использование модификатора без захвата для подвыражений может дать вам то, что вам нужно, и ничего более, что, если я правильно вас читаю, то, что вы хотите.

Точно так же, как небольшая небольшая заметка, в выражении hometoast не нужно заключать в скобки «s» для «https», поскольку у него там только один символ. Квантификаторы количественно определяют один символ (или класс символов или подвыражение) непосредственно перед ними. Итак:

https?

будет отлично соответствовать 'http' или 'https'.

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