From: Logan Capaldo Date: 2007-03-16T23:25:31+09:00 Subject: Re: Splitting A String On Fri, Mar 16, 2007 at 10:35:01PM +0900, Andrew Stewart wrote: > Hello, > > What's a (good) way to convert this: > > 'a quick "brown fox" jumped "over the lazy" dog' > > into this: > > [ 'a', 'quick', 'brown fox', 'jumped', 'over the lazy', 'dog' ] ? > Here's yet another way: #!/usr/bin/env ruby require 'test/unit' require 'strscan' class TestScan < Test::Unit::TestCase def test_splitter assert_equal( %w(a b c), splitter(%q{a b c})) assert_equal(["the", "\"quick brown\"", "fox", "jumped", "over", "the", "lazy", "dog"], splitter(%{the "quick brown" fox jumped over the lazy dog})) end end def splitter(s) res = [] scanner = StringScanner.new(s) scanner.skip(/\s*/) until scanner.eos? if scanner.scan(/"/) # quoted string scanner.scan(/([^"]*")/) res << '"' + scanner[1] elsif scanner.scan(/(\S+)/) res << scanner[1] end scanner.skip(/\s*/) end res end __END__ > Thanks! > > Regards, > Andy Stewart