Изначально я думал, что это будет проблема в верхнем / нижнем регистре.Скорее всего, вы можете следовать тому же с правильными юникодами, которые вы, возможно, захотите узнать.
Одна проблема с вашими выражениями может заключаться в том, что +
может отсутствовать.
Я предполагаю, что, возможно, это выражение может работать:
([\x{0041}-\x{005A}]+)
, если все может быть в верхнем регистре , или, возможно, некоторые выражения, подобные:
([\x{0041}-\x{005A}]{2,})
, если мы просто хотим заменить SONYA
, а не S O N Y A
.
В этой демонстрации это объяснение объяснено, если вам интересно.
Тест
$re = '/([\x{0041}-\x{005A}]+)/u';
$str = 'SONYA';
$subst = '\\L$1';
$result = preg_replace($re, $subst, $str);
echo $result;
Ссылка
Юникод строчных и прописных букв