私は正規表現に本当に慣れていません。私は次のURLを持っています:http://www.foo.bar.com/hgur_300x300.jpg
そしてhttp://www.foo.bar.com/hgur_100x100.jpg
レールでgsubを正規表現で使用して[300X300.jpg AND 180X180.jpg]を見つけて500X500に置き換えるにはどうすればよいですか?
私は正規表現に本当に慣れていません。私は次のURLを持っています:http://www.foo.bar.com/hgur_300x300.jpg
そしてhttp://www.foo.bar.com/hgur_100x100.jpg
レールでgsubを正規表現で使用して[300X300.jpg AND 180X180.jpg]を見つけて500X500に置き換えるにはどうすればよいですか?
"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")
より正確になります
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"
次の方法を使用することをお勧めします。
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 の場合scheme
、path
とhost
も未定義になります。