Flickr-style tag splitting in Ruby

Written . Tagged Ruby.

Someone asked on IRC for Ruby code to split tags Flickr style, e.g. getting the tags from tag1 tag2 "tag 3 has spaces" tag4.

I came up with this:

1
2
3
def parse_tags(string)
  string.split(/"(.+?)"|\s+/).reject {|s| s.empty? }
end

It even preserves tag order, which you wouldn’t get if you’d first gsub out (and store) quoted tags and then split the rest.