2014-09-02 52 views
0

對不起,我是新來的正則表達式,請原諒我。我有幾個字符串,例如更改字符串中的網址(如果存在)

"mso-table-lspace:0;mso-table-rspace:0;margin:0;padding:0;background: url(http://someurl/lib/id/w/download_bg.jpg) no-repeat top left #f9f9f9; text-align:center;" 

"font-size: 3px; line-height: 3px;" 

我想首先檢查是否字符串包含一個圖像URL(包含HTTPS?和.png或.jpeg或.jpg),如果出現在字符串以不同的URL替換。

因此,對於第一個字符串輸出應該是

"mso-table-lspace:0;mso-table-rspace:0;margin:0;padding:0;background: url(http://someotherurl/lib/id/w/download_bg.jpg) no-repeat top left #f9f9f9; text-align:center;" 

回答

1

你可以試試下面的GSUB命令,

gsub(/^(.*?https?:\/\/)([^\/]*)(.*?(?:\.png|\.jpeg|\.jpg))/, '\1someotherurl\3') 

代碼:

> IO.write("/path/to/the/file", File.open("/path/to/the/file") {|f| f.read.gsub(/^(.*?https?:\/\/)([^\/]*)(.*?(?:\.png|\.jpeg|\.jpg))/, '\1someotherurl\3')}) 
=> 201 

例子:

irb(main):006:0> "mso-table-lspace:0;mso-table-rspace:0;margin:0;padding:0;background: url(http://someurl/lib/id/w/download_bg.jpg) no-repeat top left #f9f9f9; text-align:center;".gsub(/^(.*?https?:\/\/)([^\/]*)(.*?(?:\.png|\.jpeg|\.jpg))/, '\1someotherurl\3') 
=> "mso-table-lspace:0;mso-table-rspace:0;margin:0;padding:0;background: url(http://someotherurl/lib/id/w/download_bg.jpg) no-repeat top left #f9f9f9; text-align:center;" 
-1

這是可以做到在許多方面,一個簡單的例子

a = "mso-table-lspace:0;mso-table-rspace:0;margin:0;padding:0;background: url(http://someurl/lib/id/w/download_bg.jpg) no-repeat top left #f9f9f9; text-align:center;" 

現在,

a.gsub(a.scan(/http(.*?)(jpg|png)/)[0][0],"://someother-url") if a.scan(/http(.*?)(jpg|png)/).size > 0 
# => "mso-table-lspace:0;mso-table-rspace:0;margin:0;padding:0;background: url(http://someother-urljpg) no-repeat top left #f9f9f9; text-align:center;" 
+0

這種解決方案是非常麻煩 - 它假設只有一個米atch,然後它在比賽本身上使用'gsub',假設它在其他地方沒有被使用(考慮文本'「http://abc/this.jpg not_a_url_://abc/this.should.not.be.replacement 「')。它還掃描字符串_twice_,這不是非常高效...... – 2014-09-02 11:27:40

0
(?=.*?(?:http|https):\/\/.*\/.*?\.(?:jpg|png|jpeg).*)(.*?)https?:\/\/.*\/.*?\)(.*) 

嘗試this.This適用於所有情況。

查看演示。

http://regex101.com/r/kJ6rS7/1

1

由於您的輸入是CSS,我認爲這將是非常安全的假設您正在尋找這種形式

url(<http or https>://<some url>/<some path>.<image extension>) 

爲此,簡單的正則表達式的東西(不需要複雜正則表達式實際上試圖匹配的URL,可能是非常平凡的)可以使用:

text.gsub(%r{(url\(https?://)[^/]+/([^\)]+\.(png|jpeg|jpg))\)}, '\1someotherurl/\2') 
# => "mso-table-lspace:0;mso-table-rspace:0;margin:0;padding:0; 
#  background: url(http://someotherurl/lib/id/w/download_bg.jpg no-repeat 
#  top left #f9f9f9; text-align:center;" 
相關問題