<?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)
{
    
    $text      = ltrim($text);
    $firstChar = mb_substr($text, 0, 1);
    $fixed     = mb_strtoupper($firstChar);
    $text      = $fixed . mb_substr($text, 1);
    return $text;
}

/* исправляет текст */
function fixText($text)
{
    
    $sentenses = preg_split("/([.?!]{1,2})/u", $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
    foreach ($sentenses as $key => $value) {
        $sentenses[$key] = makeFirstLetterUppercase($value);
    }
    
    $text = implode("", array_values($sentenses));
    
    $reg   = array(
        "/(\\s)([,.!?:;])([а-яёa-z])/ui",
        "/([a-zа-яё])([,.!?:;])([а-яёa-z])/ui"
    );
    $right = array(
        "$2 $3",
        "$1$2 $3"
    );
    
    $spacesFixed = preg_replace($reg, $right, $text);
    
    return $spacesFixed;
}
$result = fixText($text);
echo "{$result}\n";