正则表达式组计数

问题描述 投票:0回答:1

我有以下用于匹配 URL 的正则表达式:

(?:https?://)?(?:www\.)?(?:[a-zA-Z0-9]+:[a-zA-Z0-9]+@)?(?:[a-zA-Z0-9-]+)(?:\.[a-zA-Z0-9-]+)*(?:\.[a-zA-Z]{2,})(?::\d{1,5})?(?:/[^\s]*)?(?:\?[^\s]*)?(?:#[^\s]*)?

这是细分:

  • (?:https?://)? 匹配可选的“http://”或“https://”
  • (?:www.)? 匹配可选的“www.”
  • (?:[a-zA-Z0-9]+:[a-zA-Z0-9]+@)? 匹配可选的“用户名:密码@”组合(对于像 http://username: 这样的 URL: [电子邮件受保护])
  • (?:[a-zA-Z0-9-]+) 匹配“google”等域名
  • (?:.[a-zA-Z0-9-]+)* 匹配子域,例如“.us.careers”
  • (?:.[a-zA-Z]{2,}) 匹配至少 2 个字符的顶级域,例如 '.com'
  • (?::\d{1,5})? 匹配可选端口号,例如 ':8001'
  • (?:/[^\s]*)? 匹配任意数量的路径,例如 '/path/to/resource'
  • (?:?[^\s]*)? 匹配查询参数,如 'param=one'
  • (?:#[^\s]*)? 匹配末尾的任何片段,如“#about”

为什么我会为这个正则表达式得到 2 个组?我在每对括号周围都有

?:
...例如,在检查
mailto:[email protected]

时我得到了 2 个匹配组
regex string url
1个回答
0
投票

这似乎是对您的正则表达式引擎的误解。最有可能的是,它提供了一个由整个匹配组成的默认 (

$0
) 组,并且它在测试数据中匹配此模式两次。

© www.soinside.com 2019 - 2024. All rights reserved.