Как вывести символы запрещенные в регулярном выражении?
Если я правильно понял вопрос, то можно заменить на пустоту символы, которые подходят под шаблон. А те что останется и будут "запрещенными символами".if (preg_match('/^[a-zA-Z\p{Cyrillic}\d\_\-]+$/u', $str) === 0) {
    echo "Некоторые символы не смогли пройти испытание: ".preg_replace('/^[a-zA-Z\p{Cyrillic}\d\_\-]+$/u', '', $str); 
   // по шаблону, не уверен, возможно потребуется убрать границы: ^ и $
}
В голову приходит только посимвольный preg_match.
А зачем? Какую задачу пытаешься решить?