<?php 

error_reporting(-1);

$textWithErrors = 'и что ты еще расскажешь,блинблинский.а что дальше?мм?ну и что .';
$regexpAndCorrected = [
   "/[ ]*,[ ]*/u" => ", ",
   "/[ ]*\\.[ ]*/u" => ". ",
   "/[ ]*![ ]*/u" => "! ",
   "/[ ]*\\?[ ]*/u" => "? ",
   "/[ ]*\\:[ ]*/u" => ": "
];
$regexpForSearchClause = "/(\\. |! |\\? )/u";

function correction($text, $regexp, $arrayMistakeCorrected) {
    echo "текст с ошибками:\n$text\n\n";
    
foreach ($arrayMistakeCorrected as $mistake => $corrected) {
    $text = preg_replace($mistake, $corrected, $text);
    }
    
$text = rtrim($text);
echo "текст без ошибок:\n$text\n\n";

$clauses = [];
$clauses = preg_split ($regexp, $text, -1, PREG_SPLIT_DELIM_CAPTURE);

foreach ($clauses as $key => $clause) {
  
 $characters = preg_split('//u', $clause, -1, PREG_SPLIT_NO_EMPTY);
 $characters[0] = mb_strtoupper($characters[0]);
 $clause = implode ($characters);
 
var_dump ($clause);
echo "\n\n";
    
}

$text = implode($clause);

return($text);

}

$textWithErrors = correction($textWithErrors, $regexpAndCorrected, $regexpForSearchClause);

print_r($textWithErrors);
?>