RegEx 匹配 URL 模式

RegEx 匹配 URL 模式

我正在尝试提出一个可以匹配以下格式的任何域的正则表达式模式:

示例.com

但不是这个:

子域名.example.com

目前它只需要覆盖主要 TLD(com、net、org),但我希望它能够处理其他 TLD(如 co.uk、com.br 等),以实现灵活性。

到目前为止我已经得到了这个,但它肯定需要一些工作:

^[^w].*\.[a-z]{3}.*$

正则表达式忍者可以帮助我吗?

编辑:正则表达式将在 PHP 中使用,并且由于脚本的设置,字符串开头永远不会有要匹配的协议。我必须深入研究脚本才能了解有关为什么这是真的的更多详细信息,但我相信它只是从 PHP $_SERVER 变量中获取主机名。

编辑 2:也许这可以涵盖除句点之外的任何内容,直到与 .xyz 或 .xyz.ab ​​或 .xyz.abc 匹配的内容 ^[^.]+(\.[^.]{3}|\.[^.]{2,3}\.[^.]{2,3}).*$

编辑 3:我得到了几乎完成的模式: updated below(php 需要开头和结尾的 / 和 /)有人能找出实现中的漏洞吗?它似乎按预期工作。

编辑 4:这是我目前所处的位置:updated below 它几乎符合我的要求,尽管它要求文件路径开头有 /,因此 example.com 不匹配,而 example.com/test 匹配。如果不匹配“www.example.com”中的“.exa”,我就无法让它匹配 example.com。

编辑 5:好的,我们有一位获胜者:/^[^.]+((\.[^.\/]{1,3}\b){1,2}).*$/

匹配:
example.com
example.co.uk
example.com/test.php?a=b
example.co.uk/test.php?a=b
123.com
1234.com
www.123.com(匹配所有域名少于 4 个字符的 URL)

不匹配:
www.example.com
www.example.co.uk
www.example.com/test.php?a=b
www.example.co.uk/test.php?a=b
test.example.com/test.php?a=b
test.example.co.uk/test.php?a=b
www.1234.com

答案1

你使用什么语言?

总的来说,这听起来像是您想要一些与域名的基本方面相匹配的东西,排除了除划定 .tld 的句点之外的其他句点的可能性。

#http://[^.]+\.(com|net|org)#i

如果您不想匹配协议,也许是这样的。

#[^. ]+\.(com|net|org)#i

您希望处理多部分 TLD,这将真正搞砸这一切,您需要维护所有要匹配的 TLD 的手动列表。唯一的选择是进行 DNS 查找以确定列表类型。实际上没有其他方法可以使用正则表达式从域中提取子域数据,因为从权利上讲,域实际上只是某些 TLD(顶级域)的子域。

编辑:要匹配 TLD(假设它们少于四个字符),您可以尝试类似这样的方法。您必须弄清楚匹配的开始和结束是什么。您是否需要协议的存在?这是否位于某人可能在上下文之外输入句号的段落中?如果您提供有关参数的更多详细信息,我们可能会提供更精确的解决方案。

[^.]+((\.[^.]{0,3})+)

答案2

网络上最好的资源之一是 regexlib:

http://regexlib.com/Search.aspx?k=URL

http://regexlib.com/Search.aspx?k=TLD

有许多匹配协议和 TLD 或整个查询字符串的有效性示例

相关内容