我正在尝试使用正则表达式来验证我的文件是否只能包含十进制数字整数空格和换行例如一些允许的值是
文件 1
0.10
0.05
0.07
0.03
0.15
0.60
8
10.5
文件2
5 10.4
1.6766 4.2
3.9
9 4
1.67 3
我尝试使用以下正则表达式
/^((\d+\.?\d*\s*)+\n)+/
我错过了什么?
也许您应该逐行解析文件并忘记多行的事情。您可能想尝试下面的 Perl 代码。打印与您的正则表达式不匹配的行号。
my $num = qr/\d+(?:\.\d+)?/;
while( <> ){
chomp;
die "Error line $." unless m/^(?: $num (?:\s+ $num)* | \s* )$/x;
}
考虑到您的评论,这是另一个提议。我根据您的数据检查了我的正则表达式并且它有效。
$/ = undef; # slurp mode
my $num = qr/\d+(?:\.\d+)?/;
my $data = <>;
die "Error" unless $data =~ m/\A(?: ^(?: $num (?:\s+ $num)* | \s* )$)*\Z/xms;