in reply to Re: Replacing numbers using regular expression
in thread Replacing numbers using regular expression

I think actually zero digits on the right side of the decimal point should not be allowed.

1234.

isn't what I think of as a number.

I would allow zero digits on the left side though.

.1234

seems ok by me. I think the 123 in

foo123foo

shouldn't be a number, so let's look for white space, or the beginning/end of the line before and after our match. The end check can be taken care of with lookahead (?=\s|$). Unfortunately you can't have variable length lookbehind, so (?<=\s|$) is impossible. So I just do (\s|^) and you should skip this register and take the next parenthesized group for your match.

Anyway we want to match all of these:

1234
1234.1234
.1234

but not

.
1234.
1234.1234.1234
.1234.1234
foo123foo
123.foo
foo.123
A regex that will do that is:

my $fixed_point_re = qr/(\s|^)((\d+(\.\d+)?)|(\.\d+))(?=\s|$)/;
It's getting kind of hard to read, I realize, but it sits plays dead and fetches so...

Hope this helps!

Thomas.

Replies are listed 'Best First'.
Re: This checks there is at least one digit, among other things...
by Zaxo (Archbishop) on Dec 22, 2004 at 11:30 UTC

    A trailing decimal point with nothing to the right customarily says that trailing zeros of an integer are significant figures,

    1230 Three significant figures
    1230. Four significant figures

    There is nothing odd or unexpected about using that notation even where it is not needed.

    After Compline,
    Zaxo

    A reply falls below the community's threshold of quality. You may see it by logging in.