質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.00%

  • Ruby

    6385questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    6215questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

[Ruby]正規表現で末尾の文字列を取得[rails]

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 190

Takutope

score 10

 正規表現でファイルURI文字列からファイル名を取得する

 文字列例

"http://example.com/hello/how/are/you.png"

 取得したいもの

"you"

 不確定なもの

ディレクトリーのパスとファイル名
(例の場合なら http~~/not/so/good.png の可能性もある)

 確定なもの

ファイルの拡張子(例の場合は .png)


deleteやmatch gsubを使う形になると思いますが、上手に正規表現がかけません。
よろしくお願いいたします。


 追記

ディレクトリパスと名前がわからないので、正規表現がいいです。
また、文字列だけでいいので、Fileクラスとか使わない方法がいいです。
主に、下のようなプログラムで使いたいです。

uris = [
 "http://hello/you.png", 
 "https://xyz/abc.png",
 "http~~/hoge.png"
]
filenames = []

uris.each do |uri|
  filenames << uri.正規表現で拡張子なしのファイル名のみにする。
end
return filenames
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

そもそも正規表現を使おうという発想が間違っています(正規表現の練習なら別ですが)。

require "uri"

url = "http://example.com/hello/how/are/you.png"

file = File.basename(URI.parse(url).path, ".png")

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/29 11:48

    追記しました。

    キャンセル

  • 2017/11/29 11:56

    実用目的でなく、正規表現の勉強目的だと言う事でしょうか?

    filenames << uri.sub(%r|.*/|,"").sub(/\.png\z/,"")

    でしょうか。

    キャンセル

0

正規表現でないので想定と異なるかと思いますが、上記に記載されたものであれば

irb(main):001:0> require 'uri'
=> true
irb(main):010:0> path = URI.split("http://example.com/hello/how/are/you.png")[5]
=> "/hello/how/are/you.png"
irb(main):013:0> path.split('/').last.split('.').first
=> "you"

といった書き方でも取得可能かと思いました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.00%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    ハッシュにして出力したい

    下記humans.csvをrbファイルで読み取って、記載した実行結果を出したいです。その際、途中まで書いて下記記載しているrbファイルのコードを使って出したいのですがどのように続き

  • 解決済

    rubyでdef化する方法について

    下記ブログを参考にスクレイピングの練習をしてみようと思うのですが、仮にこのコードの内容をメソッドにして実行する場合、defを使ってどのような書き方ができるでしょうか? 参考ブ

  • 解決済

    csvへの出力

    実現したいこと 下記のような内容のcsvファイルを出力させたいと思っています。 "name","score1","socore2","average" "A","40","

  • 解決済

    Rubyから実行ファイルを実行して、対話的に処理を行いたい。

    タイトルのとおりです。 実行ファイルを、端末からではなくRubyで実行して、入出力を対話的に行いたいです。 ただ、下のプログラムを動かすと、なにも出力せずとまります。 メッセ

  • 解決済

    ディレクトリ内にあるファイル名を配列に入れる

    dir = Dir.open("dat") dir.each do |f| puts f #dat内にあるファイルを表示 end これで、dat内にあるファイル名を

  • 解決済

    Rubyでopen-uriを使って画像ファイルの取得時のファイル名

    Rubyでopen-uriを使って画像ファイルの取得を行おうとした場合、 読み込み元のURLと同じファイル名で(今回はexample.jpg)保存するには "????.jpg"の部

  • 受付中

    rubyでnokogiri・xpathの使い方

    更新されるwebページの情報繰り返し取得したいと考えています。  //*[@id='TSm']/div[#{i}]/h2/text() の部分は本文を取得し、 //*[@id='T

  • 解決済

    rubyのnet/httpでpath指定せずにgetしたい

    環境:ruby 2.1.5 末尾にスラッシュが付かないURLからhtmlをget場合にgetがpath指定必須のため取得できません net/httpで他の書き方は無いでしょうか

同じタグがついた質問を見る

  • Ruby

    6385questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    6215questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。