Evo ako može da pomogne za početak:
Kôd:
def parse_query s
s.scan(/((\S+)\:\s?)?([+-])?(("(.+?)")|(\S+))/).map{|match|
Hash[
[nil, :prefix, :plusminus, nil, nil, :phrase, :word].zip(match).select(&:all?)
]
}
end
p parse_query 'foo +bar -baz "dev pro talk" site:devprotalk.com category:cat1'
vraća
Kôd:
[
{:word=>"foo"},
{:plusminus=>"+", :word=>"bar"},
{:plusminus=>"-", :word=>"baz"},
{:phrase=>"dev pro talk"},
{:prefix=>"site", :word=>"devprotalk.com"},
{:prefix=>"category", :word=>"cat1"}
]
http://ideone.com/oRMg5