2012-11-06 11 views
7

Dire che ho una stringa come questa: "http://something.example.com/directory/"come analizzare un URL e estrarre la sottostringa richiesta

Quello che voglio fare è quello di analizzare questa stringa, ed estrarre il "something" dalla stringa.

Il primo passo consiste nel verificare chiaramente che la stringa contenga "http://" - altrimenti, dovrebbe ignorare la stringa.

Ma come faccio a estrarre lo "something" in quella stringa? Supponiamo che tutte le stringhe che questo valuterà avranno una struttura simile (cioè sto cercando di estrarre il sottodominio dell'URL - se la stringa esaminata è effettivamente un URL valido - dove inizia valido con "http://").

Grazie.

P.S. So come controllare la prima parte, cioè posso semplicemente dividere la stringa allo "http://" ma questo non risolve il problema completo perché ciò produrrà "http://something.example.com/directory/". Tutto quello che voglio è il "something", nient'altro.

+0

http://www.regular-expressions.info/ruby.html – durron597

+1

@ durron597: non martellare tutto con regexen. L'URL è un oggetto ben definito, trattato milioni di volte sia nella libreria standard Ruby sia in milioni di altre gemme. Se fossi un esperto, risponderei. –

+0

Cosa c'è di tutti i downvotes? Non capirlo – marcamillion

risposta

18

lo farei in questo modo:

require 'uri' 

uri = URI.parse('http://something.example.com/directory/') 
uri.host.split('.').first 
=> "something" 

URI è costruito in Ruby. Non è il più completo, ma è in grado di svolgere questo compito per la maggior parte degli URL. Se hai IRIs, guarda su Addressable::URI.

+0

Amo questo. Bello, elegante e non costoso. Grazie! – marcamillion

+1

E non ci richiede di mantenere alcuna espressione regolare. –

+0

Sì ... proprio quello che stavo cercando. Grazie Meng !!! – marcamillion

2

Bene, è possibile utilizzare le espressioni regolari. Qualcosa come /http:\/\/([^\.]+)/, ovvero il primo gruppo di non "." lettere dopo http. Scopri http://rubular.com/, è possibile testare le espressioni regolari contro una serie di test troppo, è grande per l'apprendimento di questo strumento :)

+1

Ho iniziato a farlo, ma è diventato piuttosto complicato abbastanza rapidamente. – marcamillion

6

Si potrebbe utilizzare URI come

uri = URI.parse("http://something.example.com/directory/") 
puts uri.host 
# "something.example.com" 

e si potrebbe poi basta lavorare sul ospite.
o v'è un gioiello domainatrix da Remove subdomain from string in ruby

require 'rubygems' 
require 'domainatrix' 

url = Domainatrix.parse("http://foo.bar.pauldix.co.uk/asdf.html?q=arg") 
url.public_suffix  # => "co.uk" 
url.domain    # => "pauldix" 
url.subdomain   # => "foo.bar" 
url.path    # => "/asdf.html?q=arg" 
url.canonical   # => "uk.co.pauldix.bar.foo/asdf.html?q=arg" 

e si può solo prendere il sottodominio.

+0

Penso che questa sia una buona soluzione generale per chiunque voglia analizzare tutti i tipi di URL. Nel mio caso, però, ho solo bisogno di analizzare un formato specifico di URL - che è "foo.bar/somedir". – marcamillion

+0

@marcamillion Ecco perché ti ho dato anche la prima alternativa, che è la stessa di quello che ha risposto l'uomo di latta. – oldergod

+0

@oldergod: Quanto viene mantenuta quella dominatrice? È maturo? –

Problemi correlati