Forum: Ruby Regular Expression Question

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Cc5b51aea6f3c7f0678270933a3b16dd?d=identicon&s=25 (Guest)
on 2007-04-17 02:56
(Received via mailing list)
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]).

4feed660d3728526797edeb4f0467384?d=identicon&s=25 Bill Kelly (Guest)
on 2007-04-17 03:54
(Received via mailing list)
From: "" <>
> 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,

703fbc991fd63e0e1db54dca9ea31b53?d=identicon&s=25 Robert Dober (Guest)
on 2007-04-17 21:48
(Received via mailing list)
On 4/17/07, <> 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 ;)
May I introduce you to this idiom:

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

This topic is locked and can not be replied to.