From: daz Date: 2005-12-09T14:02:36+09:00 Subject: Re: Regex: greedy pattern basi wrote: > Hello, > > In the code below, the pattern /#{a}/ consumes more than what I'd > expect it to: > > irb(main):338:0> abbr = %w[Mr. Dr. i.e. Prof.] > text = "Mr. Drake and Dr. Hide, i.e., Mr. Dride, I presume?" > abbr.each do |a| > abbrNoDot = a.gsub(/\./,"") > text.gsub!(/#{a}/,abbrNoDot) > end > puts text > => ["Mr.", "Dr.", "ave.", "st.", "i.e.", "Prof."] > => "Mr. Drake and Dr. Hide, i.e., Mr. Dride, I presume?" > => ["Mr.", "Dr.", "ave.", "st.", "i.e.", "Prof."] > Mr Drke and Dr Hie ie, Mr Drde, I presume? > > Thus "Drake" and "Dride satisfy the pattern "Dr", becoming "Drke" and > "Drde". I've tried many variations on the pattern /#{a}/, but I just > don't have enough Regex in my mind yet. > > Thanks for the help, > basi > You need to escape the dot which is matching any character. abbr = %w[Mr. Dr. i.e. Prof.] text = "Mr. Drake and Dr. Hide, i.e., Mr. Dride, I presume?" abbr.each do |a| text.gsub!(/#{Regexp.escape(a)}/, a.gsub(/\./, '')) end puts text #=> Mr Drake and Dr Hide, ie, Mr Dride, I presume? daz