你能分享一个URL解析实现的链接吗?

据我所知,URL包含以下字段:

  • 协议(http,https,ftp等)
  • 用户名
  • 用户密码
  • 主机地址(IP地址或DNS FQDN)
  • 端口(可以暗示)
  • 服务器文档根目录内的文档路径
  • 一组参数和值
  • 文件部分(#)

 协议://用户:密码@主机:端口/路径/文件ARG1 = VAL1&ARG2 = val2的#部 

我需要一个代码来从任何给定的URL字符串中获取任何这些字段的值(如果没有设置,则为null /空值)。 我自己实现这个还是已经有了代码,所以我不需要发明一个轮子?

我对Scala或Java代码特别感兴趣。 C#,PHP,Python或Perl代码也很有用。

URL类为您提供所需的一切。 请参阅http://download.oracle.com/javase/6/docs/api/java/net/URL.html

URL url = new URL("protocol://user:password@host: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 

为此使用java.net.URI类。 URL用于实际资源和真实协议。 URI用于可能不存在的协议和资源。

在Java中,只需使用URL类 。 它提供了诸如getProtocolgetHost等方法来获取URL的不同部分。

PHP: http : //au.php.net/manual/en/function.parse-url.php

默认情况下,URL不支持ldap。 可以扩展URL并添加协议,但我最终得到了一个简单的解析器和一个小的新类。

基于@Codemwnci答案,这是一个完整的例子,用于从带或不带参数的url获取filename

 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