【问题标题】:Using a regex to match www.test.com, test.com and www.test.org, but not test.org使用正则表达式匹配 www.test.com、test.com 和 www.test.org,但不匹配 test.org
【发布时间】:2015-01-22 11:12:41
【问题描述】:

Nginx can use Perl regular expressions for listening on different virtual hosts/server names, among many things. 我正在尝试创建一个正则表达式来匹配具有不同 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)$

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

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

【问题讨论】:

    标签: regex perl nginx


    【解决方案1】:

    ^(www\.test\.org|(www\.)?test\.(com|net|biz))$ 是直截了当的方法 - 只需将异常完全设为异常即可。

    【讨论】:

      【解决方案2】:

      我可以在 PCRE 正则表达式部分为您提供帮助,但 nginx 部分可能会出现问题。

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

      这使用否定的前瞻来确保字符串不能匹配“test.org”,然后继续使用可选的前缀“www”。在你的“测试”之前。和 TLD。

      您可以在 regex101.com 上找到此(或任何正则表达式)的 a more thorough walk-through,并注意您提供的每个测试的性能(别管我添加的标志,那些只是确保测试域都是在这个环境下匹配的)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-10
        • 1970-01-01
        相关资源
        最近更新 更多