<?php 

error_reporting(-1);
mb_internal_encoding("utf-8");

$text = "вперед!назад!бегом!";
// Для тестов
//$text = 'roses are red,and violets are blue.whatever you do i\'ll keep it for you.';
// $text = 'привет.есть 2 функции,preg_split и explode ,не понимаю,в чем между ними разница.';
 
/* Делает первую букву в строке заглавной */
function makeFirstLetterUppercase($text) {
$text=trim($text);
return mb_strtoupper(mb_substr($text, 0, 1)).mb_substr($text,1,mb_strlen($text));
}
 
/* исправляет текст */
function fixText($text) {
$sep = ".";
$arr = explode($sep,$text);
$regexp="/\s*(\,|\.|\!|\?)([А-ЯЁа-яё]|[A-Za-z])/u";
foreach($arr as &$value){
$value = makeFirstLetterUppercase($value);
}
unset($value);
$text = implode($sep,$arr);
return preg_replace($regexp,"$1 $2",$text);
}

 
$result = fixText($text);
echo "{$result}\n";