使用正则表达式来匹配 www.test.com、test.com 和 www.test.org,但不 test.org



Nginx可以使用Perl正则表达式来监听不同的虚拟主机/服务器名称,等等。我正在尝试创建一个正则表达式以将 a 域与不同的 TLD 匹配,除了一个没有 www 子域的域。我一直在使用 RegExr 来帮助我创建一个初始正则表达式,并做了一些阅读以尝试进一步了解我的理解,但我无法完全理解如何做到这一点。

我一直在尝试创建一个正则表达式来匹配以下内容:

test.com (match)
www.test.com (match)
test.org (fail)
www.test.org (match)
test.net (match)
www.test.net (match)
test.biz (match)
www.test.biz (match)

到目前为止,我已经得到了:

~^(www.|)test.(com|org|net|biz)$

作为初始正则表达式,但我不确定如何添加异常以实现我想要的。

非常感谢,如果这看起来很简单,很抱歉。(第一次创建正则表达式,您可能知道。

^(www.test.org|(www.)?test.(com|net|biz))$

直接的方法——只需将异常完全设置为异常即可。

我可以在PCRE正则表达式部分为您提供帮助,但是nginx部分可能会打嗝。

~^(?!test.org)(?:www.)?test.(?:com|org|net|biz)$

这使用否定的前瞻来确保字符串不能与"test.org"匹配,然后在"test."和TLD之前有一个可选的前缀"www."。

您可以找到对此(或任何正则表达式)的更彻底的演练,并注意您提供的每个测试的性能,regex101.com(不要介意我添加的标志,这些标志只是确保测试域在此环境中都匹配)。

相关内容

最新更新