Solution: Number
examples/regex-perl/is_number.pl
#!/usr/bin/perl use strict; use warnings; while (my $number = <STDIN>) { if (is_non_negative($number)) { print "non negative integer without +- sign\n"; # 0, 3, 7 } if (is_integer($number)) { print "integer with optional +- sign\n"; # -1, +3 } if (is_real($number)) { print "real number with decimal point\n"; # 3.1, 0.0, .3, 2., -.7 } if (is_exp($number)) { print "exponential format\n"; # .1e } if (is_exp2($number)) { print "exponential format (x)\n"; # .1e } } sub is_non_negative { $_[0] =~ /^\d+$/ } sub is_integer { $_[0] =~ /^[+-]?\d+$/ } sub is_real { $_[0] =~ /\d/ and $_[0] =~ /^[+-]?\d*\.?\d*$/} sub is_exp { $_[0] =~ /\d/ and $_[0] =~ /^[+-]?\d*\.?\d*(e[+-]?\d+)?$/} sub is_exp2 { $_[0] =~ /\d/ and $_[0] =~ /^ [+-]? # optional + or - sign \d* # 0 or more digits before the decimal point \.? # optional decimal point \d* # 0 or more digits after the decimal point (e[+-]?\d+)? # optional "e" followed by an integer number $/x}