【发布时间】:2010-10-24 14:32:21
【问题描述】:
我需要匹配一个主机名——但不想要 tld:
example.com =~ /regex/ => 示例
sub.example.com =~ /regex/ => sub.example
sub.sub.example.com =~ /regex/ => sub.sub.example
对正则表达式有帮助吗?谢谢。
【问题讨论】:
-
那么 sub.example.co.nz 呢?
我需要匹配一个主机名——但不想要 tld:
example.com =~ /regex/ => 示例
sub.example.com =~ /regex/ => sub.example
sub.sub.example.com =~ /regex/ => sub.sub.example
对正则表达式有帮助吗?谢谢。
【问题讨论】:
假设您的字符串格式正确并且不包含协议之类的内容 [即http://],您需要所有字符,但不包括最终的 .tld。
所以这是最简单的方法。正则表达式的诀窍是不要让事情变得过于复杂:
.*(?=\.\w+)
这基本上是说,给我[例如] .xxx 后面的集合中的所有字符,这基本上只会返回最后一个句点之前的所有内容.
如果您没有前瞻功能,它可能最容易使用:
(\w+\.)+
这将为您提供所有内容,包括最后的“。”然后修剪'.'。
【讨论】:
试试这个
/.+(?=\.\w+$)/
如果不支持 ?= 它会是
/(.+)\.\w+$/
然后取第一组的内容
【讨论】:
你可以去掉 tld:
s/\.[^\.]*$//;
【讨论】:
(?<Domain>.*)\.(?<TLD>.*?)$
【讨论】:
(.*)\.
这并不是特定于 tlds,它只会为您提供一行中最后一个句点之前的所有内容。如果您想对有效的 TLD 或任何内容严格要求,则必须以不同的方式编写。
【讨论】:
我不清楚您希望如何进行匹配。但是使用通常的扩展正则表达式,您应该能够将任何 tld 与 [a-zA-Z]{2,3} 匹配因此,如果您尝试获取 tld 以外的全名,则类似于
\(.\)\.[a-zA-Z]{2,3}$
应该很接近了。
【讨论】: