Próbuję użyć wyrażenia regularnego w celu sprawdzenia, czy mój plik może zawierać tylko liczby dziesiętne, spacje i nową linię Dla np. niektóre dozwolone wartości to
Plik1
0.10
0.05
0.07
0.03
0.15
0.60
8
10.5
File2
5 10.4
1.6766 4.2
3.9
9 4
1.67 3
Próbowałem użyć następującego wyrażenia regularnego
/^((d+.?d*s*)+n)+/
Co jestem ja chybianie?
Odpowiedzi:
2 dla odpowiedzi № 1Może powinieneś parsować pliki po linii i zapomnieć o multilinii. Możesz wypróbować następujący fragment kodu Perla. Który wypisuje numer linii niepasujący do Twojego wyrażenia regularnego.
my $num = qr/d+(?:.d+)?/;
while( <> ){
chomp;
die "Error line $." unless m/^(?: $num (?:s+ $num)* | s* )$/x;
}
0 dla odpowiedzi nr 2
Biorąc pod uwagę twój komentarz, oto kolejna propozycja. Sprawdziłem moje wyroki na twoje dane i to działa.
$/ = undef; # slurp mode
my $num = qr/d+(?:.d+)?/;
my $data = <>;
die "Error" unless $data =~ m/A(?: ^(?: $num (?:s+ $num)* | s* )$)*Z/xms;