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:
It's getting kind of hard to read, I realize, but it sits plays dead and fetches so...my $fixed_point_re = qr/(\s|^)((\d+(\.\d+)?)|(\.\d+))(?=\s|$)/;
Hope this helps!
Thomas.
In reply to This checks there is at least one digit, among other things...
by tphyahoo
in thread Replacing numbers using regular expression
by agynr
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |