Ruby on rails URL操作:http://example.com/foo.jpg -&燃气轮机;http://example.com/foo.preview.png
在rails中,我想编写一些代码来更改这个url字符串Ruby on rails URL操作:http://example.com/foo.jpg -&燃气轮机;http://example.com/foo.preview.png,ruby-on-rails,ruby,regex,Ruby On Rails,Ruby,Regex,在rails中,我想编写一些代码来更改这个url字符串 https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.jpg 到 https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.png 我应该使用正则表达式来更改它吗 我是新来的Regexp,任何人都可以告诉我如何做,以及如何学习这些东西 谢谢如果分机是固定长度的,最好使用 输出 https://img.s
https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.jpg
到
https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.png
我应该使用正则表达式来更改它吗
我是新来的Regexp,任何人都可以告诉我如何做,以及如何学习这些东西
谢谢如果分机是固定长度的,最好使用 输出
https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.jpg
https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.jpeg
https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.jpeg
或者,如果扩展名长度可变,则可以使用rindex()
查找扩展名的开头
url = "https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.jpeg"
dot_index = url.rindex(".")-1
print url[0..dot_index] + ".preview" + url[dot_index+1..-1]
url = "https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.jpg"
ext = File.extname(url)
url.gsub(ext, ".preview{ext}")
输出
https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.jpg
https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.jpeg
https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.jpeg
如果必须使用正则表达式,请按如下方式操作:
url = "https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.jpeg"
print url.gsub(/\.(\w{2,4})$/, ".preview.\\1")
输出
https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.jpg
https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.jpeg
https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.jpeg
换一根绳子似乎就足够了。 “.jpg”->”.preview.png” 不幸的是,我不认识鲁比。 在python中,它将是
new_url = url.replace(".jpg",".preview.png",1)
我认为它在ruby中也会类似。它似乎是sub()
new_url = url.sub(".jpg",".preview.png")
如果您确定文件以.jpg结尾,您可以
url = "https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.jpg"
url.gsub(".jpg", ".preview.jpg")
否则,您可以获取文件名,然后附加扩展名
url = "https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.jpeg"
dot_index = url.rindex(".")-1
print url[0..dot_index] + ".preview" + url[dot_index+1..-1]
url = "https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.jpg"
ext = File.extname(url)
url.gsub(ext, ".preview{ext}")
+1! 如果我们假设始终存在文件扩展名,则可以使用
/\.(.+?)$/
。这将消除字符计数限制的需要。@难以捉摸,您的正则表达式也可以匹配第一个\.
之后的整个字符串。因为“.”将匹配任何内容,并且正则表达式是贪婪的。此外,您可以使用*
而不是+?
,尽管我不知道如果您假定它存在,为什么要将其设置为可选。也许/\.([\w\d]+)$/
就可以了,尽管这仍然忽略了像.tar.gz
@ehsanul这样的情况:?
是让正则表达式变得懒惰而不是贪婪。您可以将其应用于所有量词。该正则表达式匹配最后一个
之后的所有内容,最后一个
必须由一个或多个字符组成(+
)。我想到的另一个选项是:/\.[^\.]+?$/
哇,它很管用,但是我怎么能把它写进一个方法picture.url.to_preview,我只是在rails的表面上做了些修改,现在我不知道如何在ruby中修改我自己的方法。请help@elusive不确定它是如何使正则表达式变懒的。我只是用“was.sup.man/weljrweljwrwl.jpg”这样的字符串尝试了一下,它匹配了“was”之后的所有内容对于这个问题,没有必要(见其他答案),但了解regexp肯定没有坏处……请参阅了解Ruby中正则表达式的良好起点。许多人都喜欢使用regexp,就像它是一个神奇的万能工具,对一切都有好处一样,是的,你可以用正确的知识使用regexp做很多神奇的事情。同时,regexp可能导致很难诊断错误,可能会由于搜索不好而导致代码运行更慢,并且很难维护,特别是当代码传递给其他开发人员时。正如@eckes所说,知道如何编写regexp很好,但更好的是知道何时使用它们。就像用C语言或汇编语言编写一样,regexp的强大功能会让人大吃一惊。@marcog再次感谢您帮助我编辑我的问题,有时我的英语不足以表达清楚。@Tin Man很高兴知道。我会小心地将它+1用于文件#extname
,但为什么字符串#gsub
?您需要多个文件扩展名吗String#sub
就足够了,对吧?如果你事先知道扩展名就足够了。这两种语言非常相似