Eu estou tentando usar a expressão regular para verificar se meu arquivo pode conter apenas números decimais números inteiros e novos espaços Por exemplo, alguns valores permitidos são
Arquivo1
0.10
0.05
0.07
0.03
0.15
0.60
8
10.5
Arquivo2
5 10.4
1.6766 4.2
3.9
9 4
1.67 3
Eu tentei usar o seguinte regex
/^((d+.?d*s*)+n)+/
O que estou perdendo?
Respostas:
2 para resposta № 1Talvez você deva analisar seus arquivos linha por linha e esquecer a coisa multilinha. Você pode querer experimentar a seguinte parte do código Perl. Que imprime o número da linha que não corresponde ao seu regex.
my $num = qr/d+(?:.d+)?/;
while( <> ){
chomp;
die "Error line $." unless m/^(?: $num (?:s+ $num)* | s* )$/x;
}
0 para resposta № 2
Considerando o seu comentário, aqui está outra proposta. Eu verifiquei meu regex contra seus dados e funciona.
$/ = undef; # slurp mode
my $num = qr/d+(?:.d+)?/;
my $data = <>;
die "Error" unless $data =~ m/A(?: ^(?: $num (?:s+ $num)* | s* )$)*Z/xms;