给定一个句点的输入,如何让一切都落后于它?

时间:2011-05-08 17:56:23

标签: ruby-on-rails ruby regex ruby-on-rails-3 match

给出如下输入

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?

5 个答案:

答案 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)

如果尾随时间段正常,/(.*)\.(.+)/将匹配第二组,如果不允许跟踪,请尝试/(.*)\.(.*)/