<?php
/* Клавиша shift 
Дан неграмотно написанный текст, состоящий из нескольких предложений на русском языке. Ошибки заключаются в неправильной расстановке пробелов и отсутствии заглавных букв. Исправь текст так, чтобы все предложения в нем начинались с большой буквы, а после знаков запятая, точка, точка с запятой, двоеточие, восклицательный и вопросительный знак стоял ровно один пробел (а перед ними — ни одного). Составные знаки вроде многоточия или 2 вопросительных знаков подряд должны сохраняться.*/

// Для тестов
$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) {
    return mb_strtoupper(mb_substr($text, 0, 1)) . mb_substr($text, 1);
}

/* Исправляет текст */
function fixText($text) {
    $regExp = [
        "expSplit" => "/(?<=[.!?])\s*/u",
        "expReplace" => "/\s*([,.!?;:\"]+)\s*/u",
        "replacement" => "$1 "
    ];
    $arrayString = preg_split($regExp["expSplit"], $text, -1, PREG_SPLIT_NO_EMPTY);
    $resultString = "";

    foreach ($arrayString as $string) {
        $resultString .= makeFirstLetterUppercase($string);
    }

    return preg_replace($regExp["expReplace"], $regExp["replacement"], $resultString);
}

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