在处理网络中的文件或资源时,你经常会遇到 URI 或 URL。这类地址可以被解析并使用。虽然大多数标准库中都提供了解析和构建这类标识符的类,但如果你需要在日志文件或大段文本中匹配它们,也可以通过正则表达式轻松提取出结构化的信息。
URI(统一资源标识符)通常由以下部分组成:协议(scheme)、主机名(host)、端口号(port,可选)和资源路径(path)。以下是一个示例:
http://google.com:80/page
在本练习中,请尝试使用正则表达式,从给出的资源地址中提取出协议、主机和端口号。
| Task | Text | Capture Groups | |
| 捕获 | ftp://file_server.com:21/top_secret/life_changing_plans.pdf | ftp file_server.com 21 | ![]() |
| 捕获 | https://regexone.com/lesson/introduction#section | https regexone.com | ![]() |
| 捕获 | file://localhost:4040/zip_file | file localhost 4040 | ![]() |
| 捕获 | https://s3cur3-server.com:9999/ | https s3cur3-server.com 9999 | ![]() |
| 捕获 | market://search/angry%20birds | market search | ![]() |
| 提示 | 我们需要匹配 URI 中的三个组成部分:首先,协议部分是由字母和数字组成的,因此可以使用 (\w+):// 来匹配。其次,主机名中可能包含非字母数字字符,比如连字符(-)或点号(.),所以我们需要显式地包含这些字符,使用 ://([\w\-\.]+) 来匹配主机名部分。最后,端口号是 URI 中的可选部分,前面会有一个冒号,可以用表达式 (:\d+) 来匹配,而为了提取具体数字,也可以写成 :(\d+)。把它们组合起来,我们最终可以使用如下完整的正则表达式来捕获所有需要的数据:(\w+)://([\w\-\.]+)(:(\d+))?。 |