<?php

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

//$text = "ну что. не смотрел еще black mesa.я собирался скачать ,но все как-то некогда было.";
// Для тестов
// $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) {
    $clauses = preg_split('/[!?.]/', $text, 0, PREG_SPLIT_NO_EMPTY);
    foreach ($clauses as $key => $clause) {
        $clause = preg_replace('/^ */', '', $clause);
        $firstLetter =mb_substr($clause, 0, 1);
        $firstLetter = mb_strtoupper($firstLetter);
        $clause = preg_replace('/^.(.+)/ui', "$firstLetter$1", $clause);
        $text = str_replace($clauses[$key], $clause, $text);
    }
    return $text;
}

/* исправляет текст */
function fixText($text) {
    $text = preg_replace('/ *([!?.,:;]) */', '$1 ', $text);
    return $text;
}

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