[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Regular Expression Question

mwmarkland@yahoo.com

4/17/2007 12:53:00 AM

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]).

Matt

2 Answers

Bill Kelly

4/17/2007 1:21:00 AM

0

From: "mwmarkland@yahoo.com" <mwmarkland@gmail.com>
>
> 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.

Hi,

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,

Bill



Robert Dober

4/17/2007 7:48:00 PM

0

On 4/17/07, mwmarkland@yahoo.com <mwmarkland@gmail.com> wrote:
> 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.
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
complex.
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."

Cheers
Robert

>
> (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]).
>
> Matt
>
>
>


--
You see things; and you say Why?
But I dream things that never were; and I say Why not?
-- George Bernard Shaw