2009-07-30 7 views
1

私は、文字列からURLの束を解析ルビーアプリを持っている:"http://"の前にテキストを削除するRegex?

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

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

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

これは罰金^^

に動作します。しかし、時にはURLがHTTPの前にテキストを持っている://例えば

文字列内の "http://"の前のテキストだけを選択できる正規表現はありますか?

+1

ヘッズアップ、あなたもURLの末尾に同じ問題を持ってしようとしている、そしてそれは対処するために非常に厳しいでしょう。 – JohnFx

+0

はい、私はJohnFxに同意します。正規表現arent 'この問題に最適です。文字列内の一致するURLは、前にSOで尋ねられました。彼らがどのようなソリューションを使用しているかを見てみてください。つまり、どのライブラリなどですか。 – Pod

答えて

6

Splitingしてからgrepを(=〜が文字列へのオフセットを返すよう)//、その前に文字列の部分を削除して行うための奇妙な方法でありますこの。なぜあなただ​​けString#scanを使用しないでください。

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

これは私の問題を解決しました。 – dMix

0

2つを組み合わせることもできます。

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

だけのhttpを検索:

10

おそらく同じ結果を達成するためのよりよい方法は、URI標準ライブラリを使用することです。

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"] 

ドキュメント:URI.extract

関連する問題