From: Robert Klemme Date: 2005-04-28T19:54:29+09:00 Subject: Re: Scanning a String "David A. Black" schrieb im Newsbeitrag news:Pine.LNX.4.61.0504280320190.13336@wobblini... > Hi -- > > On Thu, 28 Apr 2005, Robert Klemme wrote: > > > > > "Nicholas Seckar" schrieb im Newsbeitrag > > news:6bfb9c8a050427193967475977@mail.gmail.com... > >> On 4/27/05, David A. Black wrote: > >>> (You don't really need the block arg (match) :-) > >> > >> Good point :-) > >> > >>> pious".gsub(/([aeiou])(?=[aeiou])/) { "#{$1}'#{$2}" } > >> > >> We could also do away with the block altogether and use > >> "pious".gsub(/([aeiou])(?=[aeiou])/, '\1\'\2') > >> > >> Although I don't know if one approach is preferred to the other. > > > > Yes, it's preferred because it's faster. Although your variant works, I > > usually prefer to put the correct number of backslashes in there: > > > > "pious".gsub(/([aeiou])(?=[aeiou])/, '\\1\'\\2') > > Why do you consider that more correct? Although both produce the same: >> p '\1' "\\1" => nil >> p '\\1' "\\1" => nil because Ruby is so kind to take "\1" literally (i.e not using the backslash as escaping char because "\1" is not an escaping sequence). I prefer to explicitely escape the backslash and put the "1" in there literally. IMHO it's more fail safe when changes are done (especially when changing single quotes to double quotes, see below). Consider also >> p "\n" "\n" => nil >> p "\\n" "\\n" => nil >> p "\1" "\001" => nil >> p "\\1" "\\1" => nil Might be overly cautious but this is the kind of error that bites you and if you're not lucky it can take quite some time to figure what's going on here. Kind regards robert