2009-07-30 149 views
1

我有一個紅寶石應用解析來自串一串網址:正則表達式在「http://」之前刪除文本?

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

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

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

這工作得很好^^

但有時網址的HTTP前文://例如

有沒有一個正則表達式可以選擇字符串中的「http://」之前的文本,這樣我就可以去掉它了?

+1

擡起頭,你將有同樣的問題在網址的結尾太,這將是更加艱難應對。 – JohnFx 2009-07-30 16:04:26

+0

是的,我同意JohnFx。正則表達式對於這個問題不是很好。之前在SO上已經詢問了匹配字符串中的URL。看看他們使用什麼解決方案 - 即什麼庫等。 – Pod 2009-07-30 16:07:04

回答

6

劈裂然後grepping爲奇數的方式做這個。你爲什麼不只是使用String#scan

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

或者你可以將兩者結合起來。

.*(?=(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