Не могли бы вы поделиться ссылкой на реализацию синтаксического анализа URL?
Насколько я понимаю, URL-адрес состоит из следующих полей:
- Протокол (http, https, ftp и т.д.)
- Имя пользователя
- Пароль пользователя
- Адрес хоста (IP-адрес или полное доменное имя DNS)
- Порт (что может подразумеваться)
- Путь к документу внутри корневого каталога сервера
- Набор аргументов и значений
- Часть документа (#)
а
protocol://user:[email protected]:port/path/document?arg1=val1&arg2=val2#part
Мне нужен код для получения значения (или null/empty value if not set) любого из этих полей из любой заданной строки URL. Могу ли я реализовать это самостоятельно или уже есть код для этого, поэтому мне не нужно изобретать колесо?
Меня особенно интересует Scala или Java-код. Также могут быть полезны код С#, PHP, Python или Perl.
Ответы
Ответ 1
Класс URL дает вам все, что вам нужно.
См. http://download.oracle.com/javase/6/docs/api/java/net/URL.html
URL url = new URL("protocol://user:[email protected]:port/path/document?arg1=val1&arg2=val2#part");
url.getProtocol();
url.getUserInfo();
url.getAuthority();
url.getHost();
url.getPort();
url.getPath(); // document part is contained within the path field
url.getQuery();
url.getRef(); // gets #part
Ответ 2
Для этого используйте класс java.net.URI. URL-адреса предназначены для реальных ресурсов и реальных протоколов. URI для возможных несуществующих протоколов и ресурсов.
Ответ 3
В Java просто используйте класс URL
. Он предоставляет методы, такие как getProtocol
, getHost
и т.д., Чтобы получить разные части URL.
Ответ 4
PHP: http://au.php.net/manual/en/function.parse-url.php
Ответ 5
URL-адрес не поддерживает ldap по умолчанию. Можно расширить URL-адрес и добавить протоколы, но в итоге я получил простой парсер и небольшой новый класс.
Ответ 6
Основываясь на ответе @Codemwnci, вот полный пример, чтобы получить filename
от url
с аргументами или без них:
URL videoUrl = new URL("https://somesite.com/path/v/t43.1792-2/1186696120_n.mp4?efg=something");
String videoFileName = videoUrl.getPath().substring(videoUrl.getPath().lastIndexOf("/") + 1);
1186696120_n.mp4