Regular Expression قابلیت چک کردن کدهای یونیکد رو داره و برای پیدا کردن کاراکترهای فارسی باید از کد یونیکدشون استفاده شه و البته میشه براش بازه هم تعریف کرد. نمونه:
$str = 'aaaسلامbbbسلامcccسلامddd';
$a = preg_replace('@[^\x{0600}-\x{06FF}]@u', '-', $str);
echo $a; // ---سلام---سلام---سلام---
این بازه که من استفاده کردم Arabic بود. فارسی دقیق توی چند تا بازه است! توی این صفحه میتونید بازهها رو ببینید و بهترین بازه رو استفاده کنید: Unicode Character Ranges