给出如下输入
bob - invalid
bob. - invalid
bob.edu - valid
bob.com - valid
bob.newco.com - valid
在Ruby中,我想首先确定是否存在一段时间,如果我想在最后一段时间后想要所有内容?
我试过
domain_ext = search_input.split('.').last
问题是,如果输入为roger.
且返回5,则认为roger
是分机。我不知道如何在最后一段时间之后告诉Ruby?
答案 0 :(得分:2)
a = %w[
bob
bob.
bob.edu
bob.com
bob.newco.com
]
a.each{|str| p str[/\.([^.]+)\z/, 1]}
会给你
nil
nil
"edu"
"com"
"com"
答案 1 :(得分:2)
可以使用相同的正则表达式过滤掉具有TLD的域名,并返回TLD:
/\.(.+?)$/
以下是一些使用示例:
domains = %w[ foo foo. foo.com ].select{ |d| d[/\.(.+?)$/, 1] }
=> ["foo.com"]
domains = %w[ foo foo. foo.com ].map{ |d| d[/\.(.+?)$/, 1] }
=> [nil, nil, "com"]
根据Sawa的评论:
%w[ foo foo. foo.com foo.bar.com ].select{ |d| d[/(?<=\.)([a-z0-9-]+?)$/i, 1] }
=> ["foo.com", "foo.bar.com"]
%w[ foo foo. foo.com foo.bar.com ].map{ |d| d[/(?<=\.)([a-z0-9-]+?)$/i, 1] }
=> [nil, nil, "com", "com"]
答案 2 :(得分:1)
你可以根据“。”的最后一个索引来做一个子串。
domain_ext = search_index[search_index.rindex('.')+1..-1]
以上意思是:
search_index.rindex('.')+1 #Reverse index of "." + 1
search_index.rindex('.')+1..-1 # From that point to the end of the string
search_index[] #Simply takes a substring
答案 3 :(得分:1)
这个怎么样:
domain_ext = search.split('.').drop(1).last
根据您的示例产生哪些结果:
> 'bob'.split('.').drop(1).last
=> nil
> 'bob.'.split('.').drop(1).last
=> nil
> 'bob.edu'.split('.').drop(1).last
=> "edu"
> 'bob.com'.split('.').drop(1).last
=> "com"
> 'bob.newco.com'.split('.').drop(1).last
=> "com"
> '@gmail.'.split('.').drop(1).last
=> nil
答案 4 :(得分:1)
如果尾随时间段正常,/(.*)\.(.+)/
将匹配第二组,如果不允许跟踪,请尝试/(.*)\.(.*)/