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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

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

Ruby on Rails 6

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

Ruby on Rails

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

960閲覧

Regexp.last_matchの意味を教えてください

hase744

総合スコア57

Ruby

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

Ruby on Rails 6

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

Ruby on Rails

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2021/11/13 10:05

Regexp.last_matchの意味を教えてください
以下のコードで
ifでstaff/という文字列を検索まではわかるんですが
Regexp.last_match[1]でなぜstaffが出力されるんですか?

ruby

1class ApplicationController < ActionController::Base 2 layout :set_layout 3 4 private def set_layout 5 if params[:controller].match(%r{\A(staff|admin|customer)/}) 6 puts params[:controller] 7 #=>staff/top 8 puts params[:controller].match(%r{\A(staff|admin|customer)/}) 9 #=>staff/ 10 puts Regexp.last_match[1] 11 #=>staff 12 Regexp.last_match[1] 13 #=>staff 14 else 15 "customer" 16 end 17 end 18end

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/11/13 10:18

> Regexp.last_match[1]でなぜstaffが出力されるんですか? 何が得られると考えていましたか?
hase744

2021/11/13 10:26

params[:controller].match(%r{\A(staff|admin|customer)/}) の値をRegexpで使っていないのにどこから取得してるのかが分かりません
guest

回答1

0

ベストアンサー

どこから取得してるのかが分かりません

Ruby作り付けの仕組みです。正規表現をマッチさせただけで、自動的に代入されます(るりま)。

投稿2021/11/13 10:29

編集2021/11/13 10:30
maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hase744

2021/11/13 12:03

なるほど、そうだったんですね それとlast_matchの[1]の[1]というのはどういう意味なんですか? テキストには「一番目の括弧で囲まれた部分にマッチした文字を返す」って書かれてるんですけど(staff|admin|customer)の後にも括弧が存在し得るってことなんですか?
maisumakun

2021/11/13 12:45

はい、正規表現にカッコを複数書けば、[1]、[2]…のように取れます。 なお、[0]はマッチした全体になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問