Ciao a tutti,
Avrei un problemino cn la validazione di un input per una applicazione che ho fatto; dovrei verificare che l'input fornito sia in di questo tipo:
START FREEZING (in secs), END FREEZING (in secs)
0:0:0.4, 0:0:3.8
0:0:13.28, 0:0:14.96
0:0:18.80, 0:0:20.36
0:0:22.4, 0:0:23.64
0:0:25.96, 0:0:27.40
0:0:27.76, 0:0:29.96
0:0:31.64, 0:0:33.92
etc…
( è un programma di analisi per un tipo di esperimento comportamentale sui topi, se vi interessa ve lo spiego…)

Il programma dovrebbe segnalare un errore per qualunque input qualora non ci fossero i dati numerici, questi non fossero nel corretto formato, qualora ci fossero altri caratteri nn numerici, insomma qualunque cosa che nn sia come nell'esempio, apparte la prima riga che è facoltativa.
Questo è il mio tentativo:
Codice PHP:
/(START\sFREEZING\s\(in\ssecs\),\sEND\sFREEZING\s\(in\ssecs\)\n)?(^([01]\d|2[0-3]|\d)[:]([0-5]\d|\d)[:]([0-5]\d|\d)[.](\d{1,2}),\s([01]\d|2[0-3]|\d)[:]([0-5]\d|\d)[:]([0-5]\d|\d)[.](?:\d{1,2})$)/m
o più chiaramente:
Codice PHP:
/
   (^
    
START\sFREEZING\s\(in\ssecs\),\sEND\sFREEZING\s\(in\ssecs\)\n
   
$)? //Eventuale intestazione
   
(^
    ([
01]\2[0-3] | \d//Riconosce le ore
    
[:]
    ([
0-5]\| \d// I minuti
    
[:]
    ([
0-5]\| \d// I secondi
    
[.]
    (\
d{1,2}) // I centesimi
    
,\// La virgola e lo spazio fra i due valori

    
([01]\2[0-3] | \d// Si ripete
    
[:]
    ([
0-5]\| \d)
    [:]
    ([
0-5]\| \d)
    [.]
    (\
d{1,2})
   $) 
/
m// ripete per ogni linea 
Naturalmente nn funge, mi qualunque deformazione dei dati purché almeno una riga sia integra.
Credo che il problema derivi dal modifier m, che fa sì che sia sufficiente che una sola riga soddisfi la condizione perché test() ritorni true. Se modifichi tutte le righe ritorna false.
Io invece che la condizione si soddisfatta da tutte le righe.

Qualcuno può darmi una mano?