use Test::Simple;
my $pat = qr/^(?:
[0-9][0-9_]* |
0b[01][01_]* |
0o[0-7][0-7_]* |
0x[0-9a-fA-F][0-9a-fA-F_]*
)$/x;
my @oks = (
"1",
"01",
"1__",
"0b101",
"0b0101__101",
"0o2242",
"0o224__2_",
"0x2df1",
"0x2D_f1_",
);
my @ngs = (
"1.0",
"_1",
"1e23",
"1_e23_",
"0b12",
"0o12f",
"0o12e1",
"0_o2",
"0x01d1p1",
"0O1",
"0X1",
"0B1",
);
for my $val (@oks) {
ok($val =~ $pat, "match: $val");
}
for my $val (@ngs) {
ok(($val !~ $pat), "reject: $val");
}
因爲一元運算符-
不是整數字面量的一部分,所以我沒有包含它。見this document或this。
請注意,這是爲整數只,不包括浮動類型。
如果你希望所有的數字類型,該模式將是:
my $pattern = qr/^(?:
[0-9][0-9_]* (?: \.[0-9][0-9_]*)? (?: [eE][\+\-]?[0-9][0-9_]*)? |
0b[01][01_]* |
0o[0-7][0-7_]* |
0x[0-9a-fA-F][0-9a-fA-F_]* (?: \.[0-9a-fA-F][0-9a-fA-F_][pP][\+\-]?[0-9][0-9_]* | [pP][\+\-]?[0-9][0-9_]*)?
)$/x;
'但是我不知道怎麼寫呢二進制,八進制和hexadecimal.'發佈一些例子複製此。 – 2014-10-31 03:14:42
''(?: 0 [xX] [0-9a-fA-F] + | - ?\ d +(?:\。\ d +)?)$'適用於除八進制外的所有函數。 – 2014-10-31 03:28:25
'/ - ?\ d +(。\ d +)?/'這會匹配浮點數。 – nhahtdh 2014-10-31 03:30:50