Rubyにおけるグローバルマッチング
rubyの正規表現を使ったマッチングにはmatchメソッドがありますが、/gオプションがないためグローバルマッチングができない。 scanメソッドはパターンが1つの正規表現の場合はグローバルマッチングとして使えるが下記のようなにグループを使用した場合、グループに含まれていないものはマッチング対象にならない。
text ='グーグル https://www.google.co.jp/ ヤフーhttp://www.yahoo.co.jp/' p text.scan(%r{(http|https|)://[a-z0-9/.]+[/]?}) [["https"], ["http"]] # 結果
そのため、Rubyでグループを使用するグローバルマッチングを行う際には以下のようにする必要がある。
text ='グーグル https://www.google.co.jp/ ヤフーhttp://www.yahoo.co.jp/' regex = %r{(http|https|)://[a-z0-9/.]+[/]?} match_data = [] text.gsub(regex) do |data| match_data.push(data) end p match_data ["https://www.google.co.jp/", "http://www.yahoo.co.jp/"] # 結果
追伸
上の正規表現がガバガバなのは仕様です。 rubyでURLを抜き出すときはURI.extractを使うのがいいと思います。