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

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

ただいまの
回答率

91.36%

  • Ruby

    5194questions

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

  • Ruby on Rails

    5076questions

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

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

解決済

回答 2

投稿 2017/11/29 11:19 ・編集 2017/11/29 11:47

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

Takutope

score 9

 正規表現でファイル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:36

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 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"

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

投稿 2017/11/29 11:49

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

ただいまの回答率

91.36%

関連した質問

  • 解決済

    Rubyのmatchメソッドを使って文字をnilが返らず取得するよい方法

    前提・実現したいこと Ruby2.2でmatchメソッドを使って特定文字列の抜き出し処理を実装しました。 マッチしなかった場合には、空文字"" が返るようにしています。

  • 解決済

    csvへの出力

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

  • 解決済

    sinatraでurlの違いによるerbの振り分け

    sinatraに関して質問です。 例えば,aaaというフォルダにbbb.erb,ccc.erbがあるとして get '/aaa/bbb' do   erb :bbb

  • 解決済

    open-uriを使ったコードを簡素化したい

    複数のWebページを効率よくファイル化する方法を教えてください。 なんとか作ったものの冗長なのでページを増やすのが大変な気がします。 ファイルもできれば一つにまとめたいです。

  • 解決済

    rubyでウェブスクレイピング

    前提・実現したいこと rubyでウェブスクレイピングをしようとしています。  omronが提供しているwellnesslinkというサービスから、自身が測定した血圧などの測定結

  • 解決済

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

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

  • 解決済

    ruby クラスメソッドを実行すると、なぜかエラーが出てしまう

    プログラミング初心者で最近rubyをはじめたばかりでクラスメソッドを動かしたく、試しに打ったコードで原因のよくわからないエラーが出てしまいなにが悪いのかがわかりません、 ru

  • 解決済

    ターミナルでランダムに記事を開きたい

    前提・実現したいこと ターミナルから実行すると記事がブラウザ上でランダムに指定したURLで表示されるようにしたい 発生している問題・エラーメッセージ 文字列変換をしたブロ

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

  • Ruby

    5194questions

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

  • Ruby on Rails

    5076questions

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