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

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

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

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

正規表現

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

Q&A

解決済

2回答

2022閲覧

ruby の正規表現で中間一致した文字を取得したいです

bouyomisan

総合スコア87

Ruby

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

正規表現

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

0グッド

1クリップ

投稿2017/03/11 07:13

サイトのリンクを取得したのですがパターンにたいして中間一致したものを取得したいです。
ary = %w(
http://www.sample.com/2016/12/23/foo.html
http://www.sample.com/2016/12/23/bar.html
http://www.sample.com/2016/12/19/foo.html
http://www.sample.com/2016/12/19/bar.html
}

のなかから 2016/12/23 という文字のついたリンクを取得したいです。
どのようなコードを書けばいいでしょうか?

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

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

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

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

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

guest

回答2

0

a.rb

ruby

1ary = %w( 2 http://www.sample.com/2016/12/23/foo.html 3 http://www.sample.com/2016/12/23/bar.html 4 http://www.sample.com/2016/12/19/foo.html 5 http://www.sample.com/2016/12/19/bar.html 6) 7 8p ary.grep %r{2016/12/23}

実行結果

$ a.rb ["http://www.sample.com/2016/12/23/foo.html", "http://www.sample.com/2016/12/23/bar.html"]

参考情報

...
grepメソッドは、各要素に対して「引数obj === 要素」を試し、その結果が真だった要素を集めて配列にして返します。

Regexpクラスの===は正規表現のマッチです。引数を正規表現にすると、パターンにマッチする文字列を集められます。

...

投稿2017/03/11 11:47

katoy

総合スコア22324

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

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

moke

2017/03/13 00:43

うわー、なんでこれを知らなかったんだろう 恥ずかしー\(///Σ///)\ とりあえず上げておきます。
bouyomisan

2017/03/13 07:37

ほう・・・こんなのもあったのですか! ありがとうございます
guest

0

ベストアンサー

正規表現なんて考えなくてもmooriiさんのやりたいことは

ruby

1ary.select{|a|a.include?('2016/12/23')}

で十分です。逆に正規表現は

ruby

1ary = %w( 2http://www.sample.com/sample.com/2016/12/23/foo.html 3http://www.sample/2016/12/23/bar.html 4http://www.sample.com/2016/12/19 5http://www.test.com/a/t/2016/12/19/bar.html)

から日付文字列を抜き出す時とかに使います。

ruby

1ary.map{|a|a.match(/\d{4}\/\d{2}\/\d{2}/)[0]}

あと、とじかっこが"}"中かっこになってますよ
コピペてエラーに気づかず5分悩んだのは内緒

投稿2017/03/11 08:37

moke

総合スコア2241

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

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

bouyomisan

2017/03/11 09:13

う、中カッコになってますね、時間をとらせてしまって申し訳ないです(-_-;) 配列で条件に合ったのを抜き出すときは select というのを使えばいいのですね。正規表現にとらわれすぎてました・・・ 抜き出すときにもつかえるんですね。知りませんでした。 ありがとうございます。
moke

2017/03/11 09:39

私も不注意なのですorz 正確ではないですが 正規表現は文字列をフォーマット(形式) で検索する技術というふうに考えておけばオッケーです。
bouyomisan

2017/03/13 07:44

moke さん、ちょっと正規表現の使いかたについてききたいです。 moke さんに教えていただいたように正規表現はフォーマットで検索や抜き出しをするもの。僕の質問のように 2016/12/23 という具体的な場合は map や selectとか grep でするのが適切。 メールアドレス、電話番号、url などの形式的なものは正規表現で検索、抜き出しを行う。 こういう理解でいいでしょうか??
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問