Amazon.com Widgets
...not so private reflections of greg.newman
Categories & Search

Flickr-style tag splitting in Ruby

The Pug Automatic: Flickr Style Tagging in Rails

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:

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."

I haven't tried it yet but looking at it looks like a fine implementation. Very simple.

[Via Pug Automatic.]

3 Comments

mac:~ sam$ irb
>> def parse_tags(string)
>> string.split(/"(.+?)"|s+/).reject {|s| s.empty? }
>> end
=> nil
?> parse_tags("foo bar zooma groober pagerank")
=> ["foo bar zooma groober pagerank"]

Doens't look like it works to me. It returns an array with a single element(string)

There is a backslash missing in front of the first s:

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

Anyway, tags with spaces must be quoted with double quotes, not single quotes as in the article

>> def parse_tags(string)
>> string.split(/"(.+?)"|\s+/).reject {|s| s.empty?
>> end
=> nil
>> parse_tags('foo bar "zooma groober" pagerank')
=> ["foo", "bar", "zooma groober", "pagerank"]

Christian is right. It's getting stripped in the editor. Will fix that.

Leave a comment