【问题标题】:Regex to match domain name (but not TLD)正则表达式匹配域名(但不是 TLD)
【发布时间】:2019-02-06 20:20:39
【问题描述】:

我知道有大量的域匹配正则表达式四处飘荡,但找不到一个来回答我的特定问题。我正在寻找一个正则表达式,它只匹配 URL 的域名,但不匹配其他任何内容(甚至不匹配 TLD)。它不需要验证域。

所以给出下面的示例:

https://www.orchardsoft.com
https://www.horizon-lims.com/contact/us
https://www.quartzy.com
https://qbench.net
https://www.xifin.com

...正则表达式需要匹配以下内容:

Orchardshot
Horizon-lims
Quartz
QBench
Xifin

我开始使用的正则表达式是:(.|//(\w+.)+

有人能指出我正确的方向吗?

【问题讨论】:

  • @WiktorStribiżew 我尝试了该帖子中建议的正则表达式,但不幸的是它们没有考虑域协议之类的东西。不过谢谢!
  • 你在做这个服务器端/使用特定语言吗?如果像 Java servlet 这样的服务器端语言有各种各样的好东西可以让做这种事情变得轻松。
  • @JGFMK 我不是很遗憾。我只是在一个名为 Shortcuts 的应用程序中运行匹配文本操作,它可以使用正则表达式来匹配和替换文本。
  • 您应该更好地使用示例域进行说明,如RFC 2606 中所述,例如https://www.something-hyphened.example/contact/us.

标签: regex


【解决方案1】:

只要您声明可能的 TLD(此处为:.com.tr、.com、.net),您就可以使用此正则表达式:

 ([\w-]+)(?=\.(?:com\.tr|com|net))

事实上,FQDN 具有层次结构,因此无法始终使用正则表达式对其进行正确分析。对于路径中包含 TLD 的条目(例如 https://www.example.com/a.combination),它将失败(匹配两次)。

【讨论】:

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