Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails URL操作:http://example.com/foo.jpg -&燃气轮机;http://example.com/foo.preview.png_Ruby On Rails_Ruby_Regex - Fatal编程技术网

Ruby on rails URL操作:http://example.com/foo.jpg -&燃气轮机;http://example.com/foo.preview.png

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

在rails中,我想编写一些代码来更改这个url字符串

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
就足够了,对吧?如果你事先知道扩展名就足够了。这两种语言非常相似