用于匹配任何子域和顶级域的Ruby正则表达式

用于匹配任何子域和顶级域的Ruby正则表达式,ruby,regex,Ruby,Regex,我正在尝试创建一个正则表达式,它可以选择匹配任何子域,并匹配TLD。例如,它应该匹配 test.example.com example.com 它不应该匹配 fakeexample.com fake.fakeexample.com 到目前为止,我已经有了这个,它匹配子域,但在顶级域时不匹配。 (\A |(https?:\/\/)?(\w*\S*)\.{1}示例\.com您可以使用 /\A(?:https?:\/\/)?(?:\S*\.)?example\.com\z/ 见 详细

我正在尝试创建一个正则表达式,它可以选择匹配任何子域,并匹配TLD。例如,它应该匹配

  • test.example.com
  • example.com
它不应该匹配

  • fakeexample.com
  • fake.fakeexample.com
到目前为止,我已经有了这个,它匹配子域,但在顶级域时不匹配。
(\A |(https?:\/\/)?(\w*\S*)\.{1}示例\.com

您可以使用

/\A(?:https?:\/\/)?(?:\S*\.)?example\.com\z/

详细信息

  • \A
    -字符串的开头
  • (?:https?:\/\/)?
    -可选(如末尾的
    量词重复1或0次)非捕获组匹配
    http
    ,可选
    s
    ,然后是
    /
    子字符串
  • (?:\S*\)?
    -一个可选的非捕获组,匹配0个或多个非空白字符(带有
    \S*
    )的1次或0次出现,然后是一个点(
    \。
  • example\.com
    -一个
    example.com
    子字符串
  • \z
    -字符串结尾

谢谢,成功了!使用正则表达式无法解决此问题,因为完全相同的域路径可能引用顶级域,也可能不引用顶级域,这取决于客户端的网络。特别是,您发布的域路径都是相对路径,而不是绝对路径,因此它们是相对于客户端的默认后缀进行查找的。例如,如果我在德国一家名为“Foo”的公司工作,该公司拥有域
Foo.de
,其通信部门正在使用域
com
,并且有一个名为
example
的服务器,然后对
example.com
的DNS查询将实际返回
example.com.foo.de.
的地址。下面的答案有什么问题?