<?php
header("Content-Type: text/plain");
mb_internal_encoding('utf-8');

// Правильные: 
$text = <<<EOF
нет пробела после запятой,точки с запятой;восклицательного знака!вопросительного знака?двоеточия:
«жы» или «шы» написано с буквой ы,
в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан»
в тексте есть слова а или но без запятой перед ними.
EOF
;

// Найденное
$result = array();

// Список ошибок
$regexp = array(
        '/(,|;|!|[?]|:)(\\S)/u',
        '/(ж|ш)(ы)/u',
        '/(координально)/u','/(сдесь)/u','/(зделал)/u','/(зделаю)/u','/(зделан)/u',
        '/(\\s)(но|а)(\\s)/u'
        );
$regexpStr = "
        /(,|;|!|[?]|:)(\\S)|
        (ж|ш)(ы)|
        (координально)|(сдесь)|(зделал)|(зделаю)|(зделан)|
        (\\s)(но|а)(\\s)
        /u";
// Список замены
$replacement = array(
        '$1 $2',
        '$1и',
        'кардинально','здесь','сделал','сделаю','сделан',
        '$1$2,$3'        
        );

// Выводим кусок текста с ошибкой
$count = preg_match_all($regexpStr, $text, $result, PREG_SET_ORDER);
echo "Всего ошибок: {$count}\nНайденные ошибки:\n";
foreach ($result as $e) {
    echo "{$e[0]}\n";
}

// Исправляем ошибки в тексте
$text = preg_replace ($regexp, $replacement, $text);
echo "\nИсправленный текст:\n{$text}";

?>
