爲什麼它必須是一個正則表達式對象?
在這裏,我們可以先使用一個哈希對象,然後去搜索它。
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}
不,我要避免使用正則表達式,但你不覺得它會更容易把它一次一個步驟,直到你獲得的您想要進一步搜索的數據?只是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
我們可以將其轉換爲一個JSON對象搜索MH哈希值。
/#{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中做這是不是你,但涉及我希望的標籤。
但是哎呀!看起來我們不能一下子用這種模式做所有的三件事,所以我會一次只做一件。
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
對不起,最後一個。它將不得不以不同的方式處理。
我知道這可能不是你要找的東西,但你真的想要一個JSON解析器,不是這個正則表達式。 –
不要試圖自己解析JSON。這是一個解決的問題。人們已經編寫,測試和調試過的代碼。無論何時您遇到其他人可能需要處理的編程問題,請查找現有的代碼,以便爲您解決問題。 –