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
···
On Mar 29, 2007, at 4:46 PM, Jon wrote:
------------------------------------------------------------------------
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