Codice PHP:
//formato key
//$key = "3_16:54-18:30_teacher2planning_FK_teacher2module_id";
//echo "Key prima della troncatura". $key ."
";
//elimino tutto ciò che c'è dopo _teacher2planning_ e compreso _teache2planning_
$key = str_replace(substr($key, stripos($key, "_teacher2planning_")), "", $key);
// debug
//echo $key;
$rule = "/^[0-9]+_[0-9]{2}:[0-9]{2}-[0-9]{2}:[0-9]{2}$/";
if(preg_match($rule, $key)) echo "true";
se lo script si limitasse ad eseguire questo controllo quello che ti ho consigliato non cambierebbe molto per le risorse richieste dal tuo script ma immagino che prima e dopo vi siano altre richieste di elaborazione dati.
preg_match è molto potente come funzione però è anche una delle tante del set dannattamente pesanti per il sistema. Prima ci abituiamo ad allegerire il software meglio è