Лучше всего будет просто передать строку в preg_match и отследить любые ошибки, которые произошли.
try{
preg_match($in_regex, $string, $results);
//Use $results
} catch (Exception $e) {
echo "Sorry, bad regex (/" . $in_regex . "/)";
}
[Редактировать] Поскольку это не сработает, вы можете попробовать:
function bad_regex($errno, $errstr, $errfile, $errline){
echo "Sorry, bad regex.";
}
set_error_handler("bad_regex");
preg_match($in_regex, $string, $results);
restore_error_handler();