我正在学习正则表达式,并且有一项任务是制作一个表达式来验证 URL(我有一个必须验证并且必须失败的 URL 的特定列表)。这是我目前拥有的
^((https?:\/\/)(?=.*[A-Za-z]+.*)(([A-Za-z0-9]+\-*[A-Za-z0-9]+|[A-Za-z0-9])\.){1,}([A-Za-z]+)\/?$)
在所有其他 URL 中,这些 URL 必须验证:
http://1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa
http://0test.com/
但是,这些必须失败:
http://1234567890123456789012345678901234567890123456789012345678901234.com
http://0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.com
他们肯定失败了,因为他们在域名中没有字母(仅在顶级域名中),我不明白如何排除它们。
我添加了一个积极的前瞻:
(?=.*[A-Za-z]+.*)
我希望它只会检查以下重复的组:
(([A-Za-z0-9]+\-*[A-Za-z0-9]+|[A-Za-z0-9])\.){1,}
但它检查整个表达式直到最后,即它也检查顶级域名。我该如何解决这个问题?