Не работает функция preg_match_all() PHP

мне срочно нужна помощь. Нужно написать скрипт на PHP который будет вначале каждого предложения ставить на первом слове первой буквы верхний регистр. В общем есть функция preg_match_all. Со строкой английских слов работает отлично, но русские буквы не работает. Помогите пожалуйста (=

<?php

$str='Привет мир. я русский.и мне круто';


preg_match_all("/\.\s*\w/", $str, $matches);
var_dump($matches);

foreach($matches[0] as $match){
    $str = str_replace($match, strtoupper($match), $str);
}
echo $str;

?>

Ответы (1 шт):

Автор решения: u_mulder

Вообще поиск и замену можно сразу совместить в одном методе - preg_replace_callback:

$str='Привет мир. я русский.и мне круто';
$r = preg_replace_callback(
    // добавляем модификатор u, чтобы регулярка работала с многобайтными кодировками (utf-8, utf-16)
    "/\.\s*\w/u",
    // на вход поступает каждое из найденных соответствий 
    function($m) {
        // используем mb_ функцию, так как она работает с многобайтными кодировками  
        return  mb_strtoupper($m[0]); 
    }, 
    $str
);
echo $r;  // Привет мир. Я русский.И мне круто
→ Ссылка