正则表达式网址捕获组

时间:2016-09-21 20:08:44

标签: c regex capture-group

我正在编写一个正则表达式,并尝试将URL的每个部分放入其自己的捕获组中进行提取:

  • 协议 (http,https)
  • 子域 (子)
  • (域名)
  • 域名扩展 (com,net)
  • 路径 (/ path / to / file - 这是该文件所在目录的路径)
  • URI (文件名)
  • URI扩展程序 (文件扩展名 - js,css,pdf)

示例网址

http://domain.com/path1/to/file.js
http://domain.com/path-dash/to-dash/file.js
http://domain.com/path-dash/to-dash/file-name.js
https://sub.domain.com/path/to/file.js
http://sub.domain-dash.net/path/to/file.js
http://sub-dash.domain.com/path/to/file.js
http://sub-dash.domain-dash.com/path/to/file.js

到目前为止我所拥有的:

/(https?):\/\/(\w+[\-]?\w+)?.?(\w+[\-]?\w+)?/gm

期望输出:

  • 第1组:协议
  • 第2组:子域(如果存在,如果不存在则为空白)
  • 第3组:
  • 第4组:域名扩展
  • Group5:目录路径
  • 第6组:文件名
  • Group7:文件扩展名

问题:如何在上面列出的所有示例中将每个网址放入其自己的捕获组

1 个答案:

答案 0 :(得分:2)

您可以使用https://regex101.com/检查组号。

如果您 DO 关心这些数字,您可以随时使用“非捕获组(?:)

(https?):\/\/(?:([\w-]+)\.)?([\w-]+)\.(\w+)((?:\/[\w-]+)*\/)([\w-]+)+\.([\w]+)

那样你确实会得到

第1组:协议

组2.子域

第3组域名

第4组域名扩展(TLD)

组5. / path / to /

第6组文件名

第7组扩展

如果有额外的小组不打扰你,那么

/(https?):\/\/(([\w-]+)\.)?([\w-]+)\.(\w+)((\/[\w-]+)*\/)([\w-]+)+\.([\w]+)/

你会得到

第1组:协议

第3组子域名

第4组域

第5组。顶级域名(或您所说的域名扩展名)

组6. / path / to /

第8组文件名

第9组扩展