¿Qué está mal con esta expresión regular de PHP para hacer la validación de la contraseña?
ereg("/^(?=.*[a-z])(?=.*[0-9])(?=.*[^a-zA-Z0-9])(?=.*[A-Z]).{7,19}$/","ABCabc123!!");
Se supone que este es un validador de contraseñas, que requiere alfabetos en mayúsculas y minúsculas, junto con números, caracteres especiales y una longitud mínima de 8 ... pero lo anterior devuelve falso. ¿Qué estoy haciendo mal?