<?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 ,не понимаю,в чем между ними разница.';
$regexpCut = '/[\\.!?\\.\\.\\.]\\s*/ui';
$bigRegexp = array('/([а-яёa-z]?)(\\.|!|\\?|\\.\\.\\.)([а-яёa-z]?)/ui', '/(\\s*)(,)([а-яёa-z]?)/ui', '/\\s\\s*/ui');
$bigReplacement = array('$1$2 $3', '$2 $3', ' ');

/* Делает первую букву в строке заглавной */
function makeFirstLetterUppercase($text, $regexpCut, $bigRegexp, $bigReplacement) {
	/*Создаёт пустой массив для последующего наполнения готовыми предложениями; обязательно в самом начале функции*/
	$rightSentences = array();
	/*Разбивает текст на предложения*/
    $cutTheText = preg_split($regexpCut, $text); 
    /*Цикл для разложения массива на ключи и значения*/
    foreach ($cutTheText as $keys => $sentence) { 
    /*Функция для нахождения первых букв в предложениях*/
    $findTheFirstLetters = mb_substr($sentence, 0, 1); 
    /*Функция для перевода первых букв в предложених в верхний регистр*/
    $upTheFirstLetters = mb_strtoupper($findTheFirstLetters);
    /*Функция для подсчёта всех букв во всех предложениях текста - чтобы получить число, больше которого не может быть букв в предложениях текста*/
    $countAllTheLetters = mb_strlen($text, "UTF-8");
    /*Функция для обрезания начальных букв в нижнем регистре у всех предложений текста*/
    $cutTheLittleFirstLetters = mb_substr($sentence, 1, $countAllTheLetters);
    /*Конкатенация увеличенных первых букв в предложениях и обрезанных кусков предложений без первых букв*/
    $theRightSentence = $upTheFirstLetters. $cutTheLittleFirstLetters;
    /*Заполняет пустой массив получившимися предложениями; далее следует возврат получившегося*/
    array_push($rightSentences, $theRightSentence); 
    }
    return $rightSentences;
} 

/* исправляет текст */
function fixText($text, $regexpCut, $bigRegexp, $bigReplacement) {
	/*Вызывает функцию для смены регистра у начальных букв во всех предложениях*/
    $rightSentences = makeFirstLetterUppercase($text, $regexpCut, $bigRegexp, $bigReplacement);
    /*Склеивает предложения из массива в строку, разделяя их точкой и пробелом*/
    $implodeOnlyRightSentences = implode('. ', $rightSentences);
    /*Необязательная переменная для удобства слежения за работой кода*/
    $cleanRightSentences = $implodeOnlyRightSentences;
    /*Замена ошибок в тексте на правильные варианты с последующим возвратом готового варианта*/
    $cleanRightSentences = preg_replace($bigRegexp, $bigReplacement, $cleanRightSentences);
        return $cleanRightSentences;
}
/*Вызов функции для исправления текста, старт работы скрипта*/
$result = fixText($text, $regexpCut, $bigRegexp, $bigReplacement);
    echo "{$result}\n";

?>