【问题标题】:Using Regex, how can I pull out the top-level domain name?使用Regex,如何提取顶级域名?
【发布时间】:2016-05-09 16:49:52
【问题描述】:

我需要创建一个高效的正则表达式(回溯量最少)来从一些日志中提取顶级域名。 URL 可以是四种类型之一,所以我需要以下内容:

  1. “website.ca/somepage”中提取website.ca
  2. "https://subdomain.website.com/somepage" 中提取 website.com
  3. “10.10.10.10/somepage”中提取10.10.10.10
  4. "myserver/somepage" 中提取 myserver

我有一个半有效的解决方案,但它遗漏了一些。

"[^"]*(\w+\.[a-z]+|\d+\.\d+\.\d+\.\d+)\/

有人有什么建议吗?

【问题讨论】:

  • 你为什么不简单地split string by / 并取它的第一个元素?
  • 这是在 SIEM 系统中,所以它不是真正的脚本/编程环境。它只是使用 Java 正则表达式引擎来解析日志。

标签: java regex regex-lookarounds


【解决方案1】:

试试这个正则表达式:

([a-zA-Z0-9]+\.[a-zA-Z]+|[0-9\.]+|[a-zA-Z0-9]+)(?=\/)

您可以在 regex101.com 上测试它:https://regex101.com/r/dK0bJ7/4

第 1 场比赛:website.com
第 2 场:10.10.10.10
第 3 场:myserver
第4场:website.ca

【讨论】:

  • 它适用于其他人,但它在“subdomain.website.com/somepage”上匹配太多。我只想要顶级域名。
  • 对不起,我没有仔细阅读你的问题。我已经更新了我的答案。现在,它应该给出所需的输出
  • 为什么会有交替:.[a-zA-Z]+|[0-9\.]+?为什么不输入 [a-zA-Z0-9]+ ?这也可以处理 website.c9a。
  • @tamasrev:据我所知(我在这里可能错了),顶级域仅由字符组成(com、edu、biz、de、...)。因此,我明确排除了数字。我想添加 0-9 也不会造成任何伤害......
猜你喜欢
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 2022-11-09
  • 2014-02-06
  • 2020-05-02
  • 2015-12-04
  • 2018-12-30
相关资源
最近更新 更多