0

私は正規表現に本当に慣れていません。私は次のURLを持っています:http://www.foo.bar.com/hgur_300x300.jpgそしてhttp://www.foo.bar.com/hgur_100x100.jpg

レールでgsubを正規表現で使用して[300X300.jpg AND 180X180.jpg]を見つけて500X500に置き換えるにはどうすればよいですか?

4

3 に答える 3

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

2つの「100」を「500」に置き換えます

アップデート:

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

より正確になります

于 2012-07-26T08:15:31.710 に答える
0

URL全体を正規表現しないでください。URL は統一されている必要があり、式によって簡単に壊れてしまう可能性があります。最初にパスを残りの部分から切り離してから、やや厳密な表現にする必要があります。

このコードは、Rubyuriライブラリを使用してパスを解析し、直接変更します。

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"
于 2012-07-26T08:17:16.527 に答える
0

次の方法を使用することをお勧めします。

URL が純粋な文字列の場合は、"my_url.com/hgur_100x100.jpg".gsub(/\d+x\d+/,"500x500").

これは「100x100」に一致し、「500x500」に置き換えます

を使用\d+/して一致させるだけでは、ポート番号を含む URL 内のすべての番号に一致することになるため、これをお勧めします。

@injekt の使用方法URI.pathはかなり良いです。私は URI を使用してきましたが、これはかなり堅実なモジュールだと思います。しかし、それは、そもそも整形式の URI を持っているかどうかに大きく依存します。たとえば、URL をパンチインすると (たとえば、 のwww.mydomain.com/image333.pngない手でタイプした URL の場合schemepathhostも未定義になります。

于 2012-07-26T08:22:09.567 に答える