<?php

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

$text = "«Grammar Nazi». Напиши скрипт, проверяющий текст на наличие злостных ошибок:
нет пробела после запятой,точки с запятой;восклицательного!знака, 
вопросительного?знака, двоеточия:«жы» или «шы» написано с буквой ы.
в тексте есть слово «координально» или «зделал», «зделаю», «зделан»
в тексте есть слова «а» или «но» без запятой перед ними. Например а или но даже.";

echo $text."\n\n";

$regexs = array(
	'/([,.!?;:])([а-яёА-ЯЁa-z0-9])/ui' 			=> 'пробел после знака препинания',
	'/координально/ui' 							=> 'правильно будет "кАрдинально',
	'/(здела)(л|ю|н)/ui' 						=> 'приставки "З" не существует', 
	'/(ж|ш)ы/ui' 								=> 'жи/ши пиши с буквой И',
	'/([а-яёА-ЯЁa-z0-9]+)(\\s+)(а|но)(\\s+)/ui' => 'запятая перед "а", "но"'
	);
$errors = array();

foreach($regexs as $pattern => $message) {
	preg_match_all($pattern, $text, $errors, PREG_PATTERN_ORDER);
	for($i = 0; isset($errors[0][$i]); $i++) {
		echo $errors[0][$i]." - ".$message."\n";
	}
	
}