<?php

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

$text = "Такая,знаете ли,мура получается с этим программированием;поначалу всё вроде шло хорошо!Даже замечательно! Но ведь в какой-то момент всегда начинаются проблемы, вы понимаете?А в этот раз они начались тогда,когда дошёл сначала до массивов;затем было сложно с циклами и массивами управляться сразу,но вполне ещё терпимо; потом вроде бы разобрался. Думаете -это легко для гуманитария? Для гуманитария, может быть, и легко, а для меня - нет. Мне как-то проще траллить технарей,чем стать на их уровень в программировании. У меня шырокий кругозор и шикарная жызненная позиция:непротивление насилию злом,но это, как ни странно, не помогает освоить программирование. Всё это весьма удручает,а также выбивает из колеи. А выбитый из колеи гуманитарий способен затралить любого,даже уравновешенного технаря-программиста на языке PHP. Это координально меняет ситуацию, описанную сдесь. Если же я зделаю всё так, как должно быть зделано, то все останутся целы.";
$possibleErrors = array (
	                 0 => array ( "pattern" => "/.{3,5}координально.{3,5}/ui",        
	                 	         "message" => "- Ошибка в слове \"кардинально\"."
	                 	        ),
	                 1 => array ( "pattern" => "/.{3,5}сдесь.{3,5}/ui",
	                              "message" => "- Не \"сдесь\", а \"здесь\"."
	                            ),
	                 2 => array ( "pattern" => "/.{3,5}здела[лнoюет]{1,2}.{3,5}/ui", 
	                              "message" => "- Приставки \"з\" нет в русском языке."
	                            ),   
	                 3 => array ( "pattern" => "/.{3,5}[^а-яё\\s]а\\s.{3,5}/ui" , 
	                              "message" => "- Пропущен пробел перед союзом \"а\"."
	                            ),
	                 4 => array ( "pattern" => "/.{3,5}[^а-яё\\s]но\\s.{3,5}/ui", 
	                             "message" => "- Пропущен пробел перед союзом \"но\"."
	                            ),   
	                 5 => array ( "pattern" => "/.{3,5}[,\\.!\\?:;][^\\s(а|но)].{3,5}/ui",
	                             "message" => "- Пропущен пробел после знака препинания."
	                            ),       
	                 6 => array ( "pattern" => "/.{3,5}(ж|ш)ы.{3,5}/ui" , 
	                             "message" => "- \"Жи-Ши\" пиши с \"и\"!"
	                            )
 	               );
$possibleErrorsCount = count($possibleErrors); /*Считаем количество регулярных выражений в массиве*/

for ($i=0; $i < $possibleErrorsCount; $i++) { /*Цикл для поиска ошибок с помощью отдельных регулярок (ключей) в массиве и вывода соответствующих регуляркам правил (значений в массиве)*/

	if (preg_match_all($possibleErrors[$i]['pattern'], $text, $matches)) { /*Достаём из массива регулярку, подставляем её в функцию, проверяем найденные ошибки в тексте $text на соответствие*/
		$message = $possibleErrors[$i]['message']; /*Выводим соответствующее правило из массива (содержание), чтобы вывести его затем в echo*/
		$pattern = $possibleErrors[$i]['pattern']; /*Выводим соответствующую регулярку из массива (ключ)*/
        $cleanMatches = $matches[0]; /*Упрощаем получившийся массив с ошибками для возможности последующего вывода ошибок*/
        
        foreach ($cleanMatches as $key => $value) { /*Цикл для извлечения ошибок из массива и вывода их в echo*/
            
            echo "...{$value}... {$message}\n";
        }
  	}
 }

?>
