I’m trying to learn how to program in Ruby, and yesterday I came across a
Regexp issue I can’t figure out. I want to parse a commandline argument of
the form: max_repeats=
After studying the ‘pick-axe’ book, I came up with the line:
regexp = Regexp.new("\Amax_repeats=(\d+)")
but the above regexp fails to match with correct input. When I changed that
line to the following:
regexp = Regexp.new("^max_repeats=([0-9]+)")
it does match correctly with the proper input.
What I would like to know is, why doesn’t the first Regexp work? (FWIW, I’m
using Ruby 1.8.1 on Win2003 server.)
Sincerely,
Martin
PS a complete program with my regexp matching code is as follows:
#define globals
$max_repeat_count_default = 5
def get_max_repeats_value
result = $max_repeat_count_default
if not ARGV.empty?
#regexp = Regexp.new("\Amax_repeats=(\d+)")
#@@@
regexp = Regexp.new("^max_repeats=([0-9]+)")
matchdata = candidate_val = match_val = nil
ARGV.each do |arg|
matchdata = regexp.match(arg)
if matchdata != nil
match_val = matchdata[1].to_i
if candidate_val == nil
candidate_val = match_val
else
candidate_val = match_val if match_val > candidate_val
end
end
end
result = candidate_val if candidate_val != nil and candidate_val > 0
end
result
end
begin
max_repeats = get_max_repeats_value
puts “max_repeats=” + max_repeats.to_s
I’m trying to learn how to program in Ruby, and yesterday I came across a
Regexp issue I can’t figure out. I want to parse a commandline argument of
the form: max_repeats=
After studying the ‘pick-axe’ book, I came up with the line:
regexp = Regexp.new(“\Amax_repeats=(\d+)”)
but the above regexp fails to match with correct input. When I changed that
line to the following:
regexp = Regexp.new(“^max_repeats=([0-9]+)”)
I’m trying to learn how to program in Ruby, and yesterday I came across
a
Regexp issue I can’t figure out. I want to parse a commandline argument
of
the form: max_repeats=
After studying the ‘pick-axe’ book, I came up with the line:
regexp = Regexp.new(“\Amax_repeats=(\d+)”)
You’re running into a quoting issue here. See the subtle differences:
Your code (the first line) looses the backslash ("") because it is the
escape char in the double quoted string. You can use single quoted string
(last line) but in this case I’d prefer any of the other methods since the
string is constant anyway.
but the above regexp fails to match with correct input. When I changed
that
line to the following:
regexp = Regexp.new(“^max_repeats=([0-9]+)”)
it does match correctly with the proper input.
What I would like to know is, why doesn’t the first Regexp work? (FWIW,
I’m
using Ruby 1.8.1 on Win2003 server.)
As said, the regexps are not near to identical. Your expression really
starts with an uppercase “a” where you wanted it to start with “\A” which
is the “start of string” anchor.