如果存在,请更改字符串中的URL

时间:2014-09-02 10:20:19

标签: ruby regex

对不起我是regex的新手所以请原谅我。我有几个字符串,如

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

我想首先检查字符串是否包含图片网址(包含https?和.png或.jpeg或.jpg),如果存在于字符串中,则将其替换为不同的网址。

因此对于第一个字符串,输出应为

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

4 个答案:

答案 0 :(得分: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 :(得分: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;" 

答案 2 :(得分:0)

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

试试这个。这适用于所有情况。

参见演示。

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

答案 3 :(得分:-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;"