2009-07-30 23 views
1

Ich habe einen Ruby-App eine Reihe von URLs von Strings Parsen:Regex, um Text vor "http: //" zu entfernen?

@text = "a string with a url http://example.com" 

@text.split.grep(/http[s]?:\/\/\w/) 

@text[0] = "http://example.com" 

Dies funktioniert ^^

Aber manchmal ist die URLs Text vor dem HTTP: // zum Beispiel

Gibt es eine Regex, die nur den Text vor "http: //" in einer Zeichenfolge auswählen kann, damit ich es ausziehen kann?

+1

Heads up, werden Sie das gleiche Problem am Ende der URL haben, und das wird viel härter zu behandeln. – JohnFx

+0

Ja, ich stimme JohnFx zu. Regex ist nicht großartig für dieses Problem. Übereinstimmende URLs in Strings wurden zuvor in SO angefordert. Sehen Sie sich an, welche Lösungen sie verwendet haben - zB welche Bibliotheken usw. – Pod

Antwort

6

Spliting und dann greppen ist eine seltsame Art und Weise zu tun, Dies. Warum gehst du nicht einfach String#scan verwenden:

@text = "a string with a url http://example.com" 
urls = @text.scan(/http[s]?:\/\/\S+/) 
url[0] # => "http://example.com" 
+0

Danke, das hat mein Problem gelöst - es ignoriert alles, was vor dem passenden Text steht. – dMix

0

oder Sie könnten die beiden kombinieren.

.*(?=(f|ht)tp[s]://) 
0

Just for http suchen: //, dann entfernen Sie die Teile der Zeichenfolge vor, dass (wie die = ~ die in der Zeichenfolge zurückgibt)

10

Vielleicht ein schöner Weg, um das gleiche Ergebnis zu erzielen, wird die URI-Standardbibliothek zu verwenden.

require 'uri' 
text = "a string with a url http://example.com and another URL here:http://2.example.com and this here" 
URI.extract(text, ['http', 'https']) 
# => ["http://example.com", "http://2.example.com"] 

Dokumentation: URI.extract

Verwandte Themen