Rails正则表达式

时间:2012-07-26 08:13:53

标签: ruby-on-rails regex ruby-on-rails-3 rubular

我是正常表达的新手。我有以下网址:http://www.foo.bar.com/hgur_300x300.jpghttp://www.foo.bar.com/hgur_100x100.jpg

我如何在rails中使用带有正则表达式的gsub来查找[300X300.jpg和180X180.jpg]并将其替换为500X500?

3 个答案:

答案 0 :(得分:1)

"http://www.foo.bar.com/hgur_100x100.jpg".gsub(/\d+/, "500")

将取代两个" 100"使用" 500"

更新:

"http://www.foo.bar.com/hgur_100x100.jpg".gsub(/\d+x\d+/, "500x500")

会更准确

答案 1 :(得分:0)

请不要在整个网址上使用正则表达式。 URL应该是统一的,表达式很容易破坏它们。你应该首先将路径与其余部分分开,然后进行一些严格的表达。

此代码将使用Rubys uri库来解析,然后直接修改路径。

uri = URI.parse("http://www.foo.bar.com/hgur_300x300.jpg")
uri.path #=> "/hgur_300x300.jpg"
uri.path.gsub!(/\d{3}/, '500')
uri.to_s #=> "http://www.foo.bar.com/hgur_500x500.jpg"

答案 2 :(得分:0)

我建议使用以下方法。

如果您的网址是纯字符串,那么只需"my_url.com/hgur_100x100.jpg".gsub(/\d+x\d+/,"500x500")

这将匹配“100x100”并将其替换为“500x500”

我建议这样做,因为如果您只是使用\d+/进行匹配,则最终会匹配网址中的所有数字,包括端口号。

@ injekt使用URI.path的方法非常好。我一直在使用URI,我认为这是一个非常可靠的模块。但这首先取决于你是否拥有格式良好的URI。例如,如果您打入一个网址(例如,手动输入一个www.mydomain.com/image333.png而没有scheme,则pathhost也将是未定义的。