On Thu, 21 Dec 2006, Bil Kleb wrote:

> OK, I give up, what's the elegant method to
> grab the quoted substrings in the following,
>
> a = 'variables="x", "y", "z", "rho", "u", "v", "w", "p/pinf", "s", "mach"'
>
> I want an array like,
>
> ["x", "y", "z", ..., "mach"]
>
> The methods I've come up with so far are
> embarrassingly hideous.

easy:

     harp:~ > cat a.rb
     a = 'variables="x", "y", "z", "rho", "u", "v", "w", "p/pinf", "s", "mach"'

     variables = eval a

     p variables


     harp:~ > ruby a.rb
     ["x", "y", "z", "rho", "u", "v", "w", "p/pinf", "s", "mach"]


hard:

   harp:~ > cat a.rb
   a = 'variables="x", "y", "z", "rho", "u", "v", "w", "p/pinf", "s", "mach"'

   re = %r/
           "([^"\\]*(?:\\.[^"\\]*)*)"   # matches balanced double quotes
           |
           '([^'\\]*(?:\\.[^'\\]*)*)'   # matches balanced single quotes
         /ox

   variables = a.scan(re).map{|a,b| a || b}

   p variables


   harp:~ > ruby a.rb
   ["x", "y", "z", "rho", "u", "v", "w", "p/pinf", "s", "mach"]


info:

   http://rubyforge.org/pipermail/bdrg-members/2006-June/000050.html

cheers.

-a
-- 
if you find yourself slandering anybody, first imagine that your mouth is
filled with excrement.  it will break you of the habit quickly enough. - the
dalai lama