dottwatson, aparte che un match vs un testo vuoto ha tempi di esecuzione trascurabili, puoi fare diversamente:
$stringa = ...
$testo =...
$pregris = @preg_match($stringa,$testo,$risultati);
if($pregris === false){
//reg non valida
return strpos..
}elseif($pregris >0){
//reg valida, e ci sono dei match
return $risultati..
}else{
//reg valida ma niente match
}
in questo modo nel migliore dei casi fai un unico match, nel peggiore fai un match+strpos.
Considera una cosa: nemmeno php stesso controlla la validita' delle regex. Le passa direttamente al pcre e legge il risultato.
Il motore pcre invece funziona grossomodo cosi':
1. Compila regex
2. Se 1 false > return errore else
3. Esegue il match/replace/filter.. etc
4. Return risultato di 3
Tornando al caso di sopra, quello peggiore (match+strpos), anche se tu fai un preg_match con una regexp sbagliata, al livello basso il match non viene veramente fatto. Pcre fallisce la compilazione e restituisce l'errore a php.
Quindi puoi considerare le fasi 1-2 del pcre virtualmente come tua funzione isRegexp.
Considera anche che se tu scrivessi una funzione che facesse il parsing e tenesse in considerazione TUTTA la sintassi regexp, questa non sarebbe per niente piu' veloce del motore di compilazione di pcre.