Учитывая ввод с точкой, как получить все, что отстает? - PullRequest
1 голос
/ 08 мая 2011

Приведенные данные, такие как следующие

bob - invalid
bob. - invalid
bob.edu - valid
bob.com - valid
bob.newco.com - valid

В Ruby я бы хотел сначала определить, есть ли период, если я хочу все после последнего периода?

Я пытался сделать

domain_ext = search_input.split('.').last

Проблема в том, что если вход roger., который возвращает 5, думая, что roger - это ext. Я не знаю, как сказать Руби только после последнего периода?

Ответы [ 5 ]

2 голосов
/ 08 мая 2011

Одно и то же регулярное выражение может использоваться для фильтрации доменов с 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"]

Основано на комментарии Савы:

%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 голосов
/ 08 мая 2011
 a = %w[
   bob
   bob.
   bob.edu
   bob.com
   bob.newco.com
 ]

 a.each{|str| p str[/\.([^.]+)\z/, 1]}

даст вам

nil
nil
"edu"
"com"
"com"
1 голос
/ 08 мая 2011

Как насчет этого:

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
1 голос
/ 08 мая 2011

, если завершающий период в порядке, /(.*)\.(.+)/ будет соответствовать второй группе, если не разрешен трейлинг, попробуйте /(.*)\.(.*)/

1 голос
/ 08 мая 2011

Вы можете просто сделать подстроку на основе последнего индекса "."

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...