<?php

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

$texts = array(
	"ну что.      не смотрел еще black mesa.я собирался скачать  ,но все как-то некогда было.",
    "roses are red,and violets are blue.whatever you do i'll keep it for you.",
    "привет.есть 2 функции,preg_split и explode ,не понимаю,в чем между ними разница.",
    "Много их в Петербурге, молоденьких дур, сегодня в атласе да бархате, а завтра, поглядишь, метут улицу вместе с голью кабацкою... В самом деле, что было бы с нами, если бы вместо общеудобного правила: чин чина почитай, ввелось в употребление другое, например: ум ума почитай? Какие возникли бы споры!",
    "много их в Петербурге,молоденьких дур,сегодня в атласе да бархате,а завтра , поглядишь , метут улицу вместе с голью кабацкою...в самом деле ,что было бы с нами ,если бы вместо общеудобного правила:чин чина почитай , ввелось в употребление другое,например:ум ума почитай?какие возникли бы споры!",
    );
    
function makeFirstLetterUppercase($text) {
	$chars = preg_split('//u', $text, -1, PREG_SPLIT_NO_EMPTY);
	$chars[0] = mb_strtoupper($chars[0]);
	$sentence = implode('', $chars);
	return $sentence;
}

function fixText($text) {
	$matches = splitText($text);
	$results = '';
    foreach($matches as $match) {
	    $match = preg_replace('/(^\s+)/u', '', $match);
	    $match = makeFirstLetterUppercase($match);
	    $result .= $match;
    }
    $result = preg_replace('/\s*([,.;:!?])(?![?.])\s*/ui', '$1 ', $result);
    return $result;
}

function splitText($text) {
	$matches = preg_split("/(?<=[?!.])/u", $text, -1, PREG_SPLIT_NO_EMPTY);
	return $matches;
}

foreach($texts as $text) {
    $result = fixText($text);
    echo "{$result}\n\n";
}


