なぜ正規表現オブジェクトでなければならないのですか?
ここでは、最初に Hash オブジェクトを使用してから検索することができます。
mh = {"url":"http://www.netcharles.com/orwell/essays.htm","domain":"netcharles.com","title":"Orwell Essays & Journalism Section - Charles' George Orwell Links","tags":["orwell","writing","literature","journalism","essays","politics","essay","reference","language","toread"],"index":2931,"time_created":1345419323,"num_saves":24}
その出力は次のようになります
=> {:url=>"http://www.netcharles.com/orwell/essays.htm", :domain=>"netcharles.com", :title=>"Orwell Essays & Journalism Section - Charles' George Orwell Links", :tags=>["orwell", "writing", "literature", "journalism", "essays", "politics", "essay", "reference", "language", "toread"], :index=>2931, :time_created=>1345419323, :num_saves=>24}
Regexp の使用を避けたいというわけではありませんが、さらに検索したいデータが得られるまで、一度に 1 つずつ実行する方が簡単だと思いませんか? ただのMHO。
mh.values_at(:url, :title, :tags)
出力:
["http://www.netcharles.com/orwell/essays.htm", "Orwell Essays & Journalism Section - Charles' George Orwell Links", ["orwell", "writing", "literature", "journalism", "essays", "politics", "essay", "reference", "language", "toread"]]
FrankieTheKneeman が提供したパターンを使用します。
pattern = /"(url|title|tags)":"((\\"|[^"])*)"/i
mh ハッシュを json オブジェクトに変換することで検索できます。
/#{pattern}/.match(mh.to_json)
出力:
=> #<MatchData "\"url\":\"http://www.netcharles.com/orwell/essays.htm\"" 1:"url" 2:"http://www.netcharles.com/orwell/essays.htm" 3:"m">
もちろん、これはすべてRubyで行われます。Rubyはあなたが持っているタグではありませんが、関連していることを願っています.
しかし、おっと!そのパターンだと3つ同時には無理みたいなので、念のため1つずつやっていきます。
pattern = /"(title)":"((\\"|[^"])*)"/i
/#{pattern}/.match(mh.to_json)
#<MatchData "\"title\":\"Orwell Essays & Journalism Section - Charles' George Orwell Links\"" 1:"title" 2:"Orwell Essays & Journalism Section - Charles' George Orwell Links" 3:"s">
pattern = /"(tags)":"((\\"|[^"])*)"/i
/#{pattern}/.match(mh.to_json)
=> nil
あのラストでごめんなさい。別の方法で処理する必要があります。