From: "David A. Black" Date: 2008-07-13T06:02:29+09:00 Subject: Re: regular expressions help Hi -- On Sun, 13 Jul 2008, phlip wrote: > Axel wrote: > >> str = 'hi hello "hello world" hey yo' >> str.gsub!( / \" [^\"]* \" /x ) {|e| e[1..-2].gsub(' ', "\007") } >> result = str.scan( / [\w\007]+ /x ).map {|e| e.gsub("\007", " ") } >> p result > > str = 'hi hello "hello world" hey yo' > p str.scan(/(".*")|(\w+)/).flatten.compact > > => ["hi", "hello", "hello world", "hey", "yo"] That's not quite the result, though: >> str = 'hi hello "hello world" hey yo' => "hi hello \"hello world\" hey yo" >> str.scan(/(".*")|(\w+)/).flatten.compact => ["hi", "hello", "\"hello world\"", "hey", "yo"] The "'s are returned as part of the string '"hello world"'. Also, you get the wrong result if you have two quoted strings in a row, because of the greediness: >> str = 'one "two" "three" four' => "one \"two\" \"three\" four" >> str.scan(/(".*")|(\w+)/).flatten.compact => ["one", "\"two\" \"three\"", "four"] # only three strings Try this: str.scan(/"([^"]+)"|(\w+)/).flatten.compact Of course this assumes no embedded/escaped/nested "'s, etc. David -- Rails training from David A. Black and Ruby Power and Light: Intro to Ruby on Rails July 21-24 Edison, NJ Advancing With Rails August 18-21 Edison, NJ See http://www.rubypal.com for details and updates!