【问题标题】:Regex for matching domains (.com)匹配域 (.com) 的正则表达式
【发布时间】:2020-03-28 17:38:07
【问题描述】:

我正在尝试匹配字符串中的所有域,例如:

"hello.test.com"
'hello-to.ya.com'
"test.two.for.com"

基本上匹配单引号和双引号之间的所有字符 .com

这是我想出的: \.([a-z0-9-])+\.(com)

我正在使用这个可视化网站进行测试: https://regexr.com/

但它与示例 #3 不匹配,我也想搜索外部引号。我正在以字符串格式解析 JSON,所以我不想要额外的东西。

示例 JSON:

'DbiResourceId': 'db-ZDKG55HDKSLJ33',
                  'DeletionProtection': False,
                  'DomainMemberships': [],
                  'Endpoint': {'Address': 'things-dev.dj5fhdk2.us-west-2.rds.amazonaws.com',
                               'HostedZoneId': 'DKGH32DL4',
                               'Port': 1234},

非常感谢!

【问题讨论】:

  • 您不能仅通过分析字符串来匹配域,因此没有正则表达式将匹配所有情况。你要么限制你的问题空间,要么使用公共后缀列表,或者使用实时 DNS 查询来找到委派削减。示例:dk 既是域又是主机名(它会解析),www.example.uk.com 是域 example.uk.comuk.com,具体取决于您希望如何查看它等等。

标签: regex text dns


【解决方案1】:

您的正则表达式仅匹配您所有 3 个示例的一部分。如果您需要匹配整个 URL,那么您需要一个模式来匹配一个或多个 [a-z0-9-]+\. 形式的子字符串,后跟子字符串 com。看起来像:

([a-z0-9-]+\.)+com

您可以在regexr 上玩它。如果要匹配这些,可以添加外部单引号:

'([a-z0-9-]+\.)+com'

注意:我为这些正则表达式使用了您的基本字符集合来帮助您入门,看起来您正在为您的特定应用程序做“刚刚够用”。但是,这些不会捕获所有有效的 URL 名称,它们会 允许一些无效的名称(例如,一些以- 开头)。如果 您想让这更准确地符合 URL 标准,您需要查看 RFC 3986, section 2。 这详细描述了 URL 名称中允许的有效字符。

【讨论】:

  • 这会有很多误报。例如,-.com-a.coma-.com 都将被视为有效域,而实际上由于 DNS 名称语法规则,它们不是有效域。
  • @PatrickMevzek 是的,我知道这一点。我正在了解正则表达式操作的基本想法。我将编辑我的答案以改进正则表达式。
【解决方案2】:

我不完全确定你的问题是什么。

如果你愿意:

"hello.test.com"
"hello-to.ya.com"
"test.two.for.com"

匹配上

test.com
ya.com
for.com

排除子域,试试:

([a-z0-9-]*.com)

使用多行和全局标志。

【讨论】:

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