A ruby-esque "split" that respects word groups.

K

Kenosis

Greetings friends,

I wondering if anyone here has some Ruby-fu they can share with WRT
for following problem. I've toyed with this today and don't like my
solution so I thought I'd run it by y'all. In summary, suppose we
have the following input, say to a command line interpreter:

foo bar "baz 42" "matz ruby yarv" jruby

Running split on this string, of course, yeilds:

['foo', 'bar', '"baz', '42"', '"matz', 'ruby', 'yarv"', 'jruby']

What I'd like instead is a "split" that respects the quoted word
groupings, which would result in the following instead:

['foo', 'bar', 'baz 42', 'matz ruby yarv', 'jruby']

Thanks in advance for any ideas you can lend!

Cheers,

Ken
 
K

Kenosis

Greetings friends,

I wondering if anyone here has some Ruby-fu they can share with WRT
for following problem. I've toyed with this today and don't like my
solution so I thought I'd run it by y'all. In summary, suppose we
have the following input, say to a command line interpreter:

foo bar "baz 42" "matz ruby yarv" jruby

Running split on this string, of course, yeilds:

['foo', 'bar', '"baz', '42"', '"matz', 'ruby', 'yarv"', 'jruby']

What I'd like instead is a "split" that respects the quoted word
groupings, which would result in the following instead:

['foo', 'bar', 'baz 42', 'matz ruby yarv', 'jruby']

Thanks in advance for any ideas you can lend!

Cheers,

Ken

My cleanest solution thus far, which does not properly handled nested
quotes:

a = "foo 'bar baz bim' 42 'java jruby jar'"
puts a.split("'").each { |b| b.strip! }
 
J

James Edward Gray II

I wondering if anyone here has some Ruby-fu they can share with WRT
for following problem. I've toyed with this today and don't like my
solution so I thought I'd run it by y'all. In summary, suppose we
have the following input, say to a command line interpreter:

foo bar "baz 42" "matz ruby yarv" jruby

Running split on this string, of course, yeilds:

['foo', 'bar', '"baz', '42"', '"matz', 'ruby', 'yarv"', 'jruby']

What I'd like instead is a "split" that respects the quoted word
groupings, which would result in the following instead:

['foo', 'bar', 'baz 42', 'matz ruby yarv', 'jruby']
require "shellwords" => true
Shellwords.shellwords(%q{foo bar "baz 42" "matz ruby yarv" jruby})
=> ["foo", "bar", "baz 42", "matz ruby yarv", "jruby"]

Hope that helps.

James Edward Gray II
 
K

Kenosis

I wondering if anyone here has some Ruby-fu they can share with WRT
for following problem. I've toyed with this today and don't like my
solution so I thought I'd run it by y'all. In summary, suppose we
have the following input, say to a command line interpreter:
foo bar "baz 42" "matz ruby yarv" jruby
Running split on this string, of course, yeilds:
['foo', 'bar', '"baz', '42"', '"matz', 'ruby', 'yarv"', 'jruby']
What I'd like instead is a "split" that respects the quoted word
groupings, which would result in the following instead:
['foo', 'bar', 'baz 42', 'matz ruby yarv', 'jruby']
require "shellwords" => true
Shellwords.shellwords(%q{foo bar "baz 42" "matz ruby yarv" jruby})
=> ["foo", "bar", "baz 42", "matz ruby yarv", "jruby"]

Hope that helps.

James Edward Gray II

Yes, Jame - that helps a lot :)

Best,

Ken
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,754
Messages
2,569,527
Members
44,998
Latest member
MarissaEub

Latest Threads

Top