Regular Expression Question

I have been reading The Ruby Way and am confused by the temperature
conversion sample program on page 14.

The line in question is

abort “#{temp} is not a valid number.” if temp !~ /-?\d+/

What I do not understand is that if \d matches “digits”, which I
understand to be [0-9], how can this expression match “98.6”, which it
seems to do just fine.

Thank you in advance for the clarification.

(I have the 2nd Edition of The Ruby Way, First Printing. I have run
the example using ruby 1.8.5 (2007-03-13 patchlevel 35) [i386-linux]).


From: “[email protected][email protected]

seems to do just fine.

Since that regexp isn’t anchored, it only cares whether a digit
appears anywhere in the string.

It would be happy with “abc1def”.

If you anchor it, like: /\A-?\d+\z/

Then it will require an exact match, caring about all characters
between the beginning and end of the string.

Hope this helps,


On 4/17/07, [email protected] [email protected] wrote:

Thank you in advance for the clarification.
Well I guess you are a bright student.
The regexp part has been nicely answered by Bill and it follows that a
regular expression allowing for all kind of different string
representations of Floats is quite
Why not let ruby do the work for us :wink:
May I introduce you to this idiom:

Float( temp ) rescue abort temp << " is not a valid number."