如何提取域(TLD 和二级域)但忽略子域?
How can I extract a domain (TLD and second level domains) but ignore subdomains?
我是 运行 outlook 上的一个 VBA 宏,可以从电子邮件中提取域。我所拥有的效果很好,但只提取“@”符号后的所有内容,因此子域包含在 link 中,使我的排序失败。但并非每个地址都有子域,因此我必须足够灵活地同时容纳这两个地址。
以下是我从示例电子邮件地址获得的结果:
- A@xyz.com returns xyz.com
- A@subdomain.xyz.com returns subdomain.xyz.com
我希望两个电子邮件地址都发送到 return xyz.com。
我使用的字符串是:
sDomain = Right(oMail.SenderEmailAddress, Len(oMail.SenderEmailAddress) - InStr(1, oMail.SenderEmailAddress, "@"))
也许有一种方法可以使用最后一个点提取 TLD,然后将其与该点前面的二级域连接起来,但由于二级域可能有一个和号或一个点,我可以' 想出一个可以兼顾两者的公式。
感谢您的帮助!
尝试这样的事情(但请注意 Dmitry 的回答...)
Sub DomainTester()
Dim a
For Each a In Array("xyz.com", "A@xyz.com", "A@subdomain.xyz.com", "A@xyz")
Debug.Print a, Domain(a)
Next a
End Sub
Function Domain(addr) As String
Dim arr
If InStr(addr, "@") > 0 Then
arr = Split(Split(addr, "@")(1), ".")
If UBound(arr) > 0 Then Domain = arr(UBound(arr) - 1) & "." & arr(UBound(arr))
End If
End Function
您可以使用 Split()
函数将域名拆分成多个部分,但您需要更多额外的逻辑才能使其足够通用:一些 TLD 有 3 个部分,而不是 2 个 - 例如"user@domain.co.uk"
你想要 "domain.co.uk"
,而不是 "co.uk"
我是 运行 outlook 上的一个 VBA 宏,可以从电子邮件中提取域。我所拥有的效果很好,但只提取“@”符号后的所有内容,因此子域包含在 link 中,使我的排序失败。但并非每个地址都有子域,因此我必须足够灵活地同时容纳这两个地址。
以下是我从示例电子邮件地址获得的结果:
- A@xyz.com returns xyz.com
- A@subdomain.xyz.com returns subdomain.xyz.com
我希望两个电子邮件地址都发送到 return xyz.com。
我使用的字符串是:
sDomain = Right(oMail.SenderEmailAddress, Len(oMail.SenderEmailAddress) - InStr(1, oMail.SenderEmailAddress, "@"))
也许有一种方法可以使用最后一个点提取 TLD,然后将其与该点前面的二级域连接起来,但由于二级域可能有一个和号或一个点,我可以' 想出一个可以兼顾两者的公式。
感谢您的帮助!
尝试这样的事情(但请注意 Dmitry 的回答...)
Sub DomainTester()
Dim a
For Each a In Array("xyz.com", "A@xyz.com", "A@subdomain.xyz.com", "A@xyz")
Debug.Print a, Domain(a)
Next a
End Sub
Function Domain(addr) As String
Dim arr
If InStr(addr, "@") > 0 Then
arr = Split(Split(addr, "@")(1), ".")
If UBound(arr) > 0 Then Domain = arr(UBound(arr) - 1) & "." & arr(UBound(arr))
End If
End Function
您可以使用 Split()
函数将域名拆分成多个部分,但您需要更多额外的逻辑才能使其足够通用:一些 TLD 有 3 个部分,而不是 2 个 - 例如"user@domain.co.uk"
你想要 "domain.co.uk"
,而不是 "co.uk"