Originariamente inviato da Portabile84
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 è
Ma no, cosi' facendo usi la bellezza di 4 funzioni (stripos, substr, str_replace, preg_match) facendo fare allo script molto piu' lavoro di un semplice preg_match (che usi comunque, e l'accorciamento del pattern non fa assolutamente differenze percettibili, probabilmente neanche con dei benchmark).

preg_match ed altre funzioni della stessa famiglia non sono affatto "dannatamente pesanti". Una str_replace e' piu' veloce di una preg_replace nel caso si lavori con testo letterale senza wildcard, ma e' una differenza che si puo' notare solo con benchmark precisi e su iterazioni di tante sostituzioni (dove per tante intendo nell'ordine di centinaia di migliaia). Per una ricerca o una sostituzione non c'e' all'atto pratico nessuna differenza.