我有以下用于匹配 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]*)?
这是细分:
为什么我会为这个正则表达式得到 2 个组?我在每对括号周围都有
?:
...例如,在检查 mailto:[email protected]
时我得到了 2 个匹配组
这似乎是对您的正则表达式引擎的误解。最有可能的是,它提供了一个由整个匹配组成的默认 (
$0
) 组,并且它在测试数据中匹配此模式两次。