Very simple regex question

Hi, I have a very simple regex question.

I don’t understand why the regex in the example below isn’t identifying
that the string is longer than 12 characters long…

line = “xxxxxxxxxxxxxxxxxxxxxxxxxxxxx”
=> “xxxxxxxxxxxxxxxxxxxxxxxxxxxxx”

if line =~ /[a-zA-Z]{2,12}/
puts “good”
else
?> puts “bad”

end
good
=> nil

Any ideas?

Many thanks in advance!

On 11/13/2010 01:06 PM, Geometric Patterns wrote:

?> puts “bad”

end
good
=> nil

Any ideas?

Your regexp will match anywhere within the string where there is a run
of 2 to 12 characters. If you want to ensure that there is nothing
before or after whatever is matched, you need to use the begin and end
of string anchors as follows when you define your regexp:

/\A[a-zA-Z]{2,12}\z/

-Jeremy

On Sat, Nov 13, 2010 at 11:06 AM, Geometric Patterns
[email protected] wrote:

I don’t understand why the regex in the example below isn’t identifying
that the string is longer than 12 characters long…

if line =~ /[a-zA-Z]{2,12}/

That succeeds if the string contains between 2 and 12 characters,
not if it consists solely of 2-12 characters.

line = “xxxxxxxxxxxxxxxxxxxxxxxxxxxxx”
if line =~ /[a-zA-Z]{2,12}/
puts “good” # you’ll get this
else
puts “bad”
end

if line =~ /\A[a-zA-Z]{2,12}\Z/
puts “good”
else
puts “bad” # you’ll get this
end

FWIW,