From: James Edward Gray II Date: 2007-03-30T07:04:18+09:00 Subject: Re: Regex problem... Tried Searching forum already... :( On Mar 29, 2007, at 4:46 PM, Jon wrote: > I absolutely cannot figure out why this does not find a match! I tried > searching this forum before I posted... I've been stuck for hours on > such a simple problem... I feel retarded. No need to feel bad. We will figure it out... > lines is an array of strings: > > def go(lines) > reg=/\[trace\-(\d+)\]/ > > lines.each do |line| > puts line.slice!(0,25) #speed... some lines are long > puts reg.match(line)[1] > end > end > > > Here is an example string: > > [trace-2932] Application=3071000 First, let's be sure the expression matches: >> "[trace-2932] Application=3071000" =~ /\[trace\-(\d+)\]/ => 0 Yep. That's not our problem. So let's look into what slice!() is doing to your String: >> str = "[trace-2932] Application=3071000" => "[trace-2932] Application=3071000" >> str.slice!(0, 25) => "[trace-2932] Application=" >> str => "3071000" Bingo. That's the problem. See it now? Here is the documentation for slice!(): $ ri -T String#slice! ---------------------------------------------------------- String#slice! str.slice!(fixnum) => fixnum or nil str.slice!(fixnum, fixnum) => new_str or nil str.slice!(range) => new_str or nil str.slice!(regexp) => new_str or nil str.slice!(other_str) => new_str or nil ------------------------------------------------------------------------ Deletes the specified portion from _str_, and returns the portion deleted. The forms that take a +Fixnum+ will raise an +IndexError+ if the value is out of range; the +Range+ form will raise a +RangeError+, and the +Regexp+ and +String+ forms will silently ignore the assignment. string = "this is a string" string.slice!(2) #=> 105 string.slice!(3..6) #=> " is " string.slice!(/s.*t/) #=> "sa st" string.slice!("r") #=> "r" string #=> "thing" Hope that helps. James Edward Gray II