<?php
$coolStory = "Сдесь координально." ;
$regExp = '/координально|сдесь|здела[лнюет]{1,2}|\\s+а\\s+|\\s+но\\s+|[,\\.!\\?:;][^\\s]|[a-яё]*жы|шы/iu' ;
$possibleErrors = array ( 0 => array ( "pattern" => "/координально/ui" , "message" => "- Ошибка в слове \" кардинально\" ."
) ,
1 => array ( "pattern" => "/сдесь/ui" , "message" => "- Не \" сдесь\" , а \" здесь\" ."
) ,
2 => array ( "pattern" => "/здела[лнoюет]{1,2}/ui" , "message" => "- Приставки \" з\" нет в русском языке."
) ,
3 => array ( "pattern" => "/\\ s+а\\ s+/ui" , "message" => "- Пропущена запятая перед союзом \" а\" ."
) ,
4 => array ( "pattern" => "/\\ s+но\\ s+/ui" , "message" => "- Пропущена запятая перед союзом \" но\" ."
) ,
5 => array ( "pattern" => "/[,\\ .!\\ ?:;][^\\ s]/ui" , "message" => "- Пропущен пробел после знака препинания."
) ,
6 => array ( "pattern" => "/[a-яё]*жы|шы/ui" , "message" => "- \" Жи-Ши\" пиши с \" и\" !"
)
) ;
$errs = array ( ) ; /*Пустой массив, в который собираются ошибки*/
preg_match_all ( $regExp , $coolStory , $errs ) ; /*С помощью функции вытаскиваем регуляркой из текста все ошибки и заполняем ими массив $errs*/
$matches = $errs [ 0 ] ; /*Определяем переменную для всех ошибок, вытащенных предыдущей функцией*/
$number = count ( $matches ) ; /*Считаем количество ошибок в тексте*/
for ( $i = 0 ; $i < $number ; $i ++ ) { /*Цикл для поиска ошибок с помощью отдельных регулярок (ключей) в массиве и вывода соответствующих регуляркам правил (значений в массиве)*/
if ( preg_match ( $possibleErrors [ $i ] [ 'pattern' ] , $matches [ $i ] ) ) { /*Достаём из массива регулярку, подставляем её в функцию, проверяем найденные ошибки в массиве $matches на соответствие*/ $message = $possibleErrors [ $i ] [ 'message' ] ; /*Выводим соответствующее правило из массива (содержание)*/
$pattern = $matches [ $i ] ;
echo "{$pattern} и {$message} \n " ;;
echo "..." . mb_substr ( $coolStory , $matches [ $i ] - 10 , 60 ) . "... $message \n " ; }
}
//var_dump($pattern);
//var_dump($message);
?>
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7Cm1iX2ludGVybmFsX2VuY29kaW5nKCd1dGYtOCcpOwoKJGNvb2xTdG9yeSA9ICLQodC00LXRgdGMINC60L7QvtGA0LTQuNC90LDQu9GM0L3Qvi4iOwoKJHJlZ0V4cCA9ICcv0LrQvtC+0YDQtNC40L3QsNC70YzQvdC+fNGB0LTQtdGB0Yx80LfQtNC10LvQsFvQu9C90Y7QtdGCXXsxLDJ9fFxccyvQsFxccyt8XFxzK9C90L5cXHMrfFssXFwuIVxcPzo7XVteXFxzXXxbYS3Rj9GRXSrQttGLfNGI0YsvaXUnOyAKCiRwb3NzaWJsZUVycm9ycyA9IGFycmF5ICgKCSAgICAgICAgICAgICAgICAgMCA9PiBhcnJheSAoICJwYXR0ZXJuIiA9PiAiL9C60L7QvtGA0LTQuNC90LDQu9GM0L3Qvi91aSIsICAgICAgICAKCSAgICAgICAgICAgICAgICAgCSAgICAgICAgICJtZXNzYWdlIiA9PiAiLSDQntGI0LjQsdC60LAg0LIg0YHQu9C+0LLQtSBcItC60LDRgNC00LjQvdCw0LvRjNC90L5cIi4iCgkgICAgICAgICAgICAgICAgIAkgICAgICAgICksCgkgICAgICAgICAgICAgICAgIDEgPT4gYXJyYXkgKCAicGF0dGVybiIgPT4gIi/RgdC00LXRgdGML3VpIiwKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXNzYWdlIiA9PiAiLSDQndC1IFwi0YHQtNC10YHRjFwiLCDQsCBcItC30LTQtdGB0YxcIi4iCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKCSAgICAgICAgICAgICAgICAgMiA9PiBhcnJheSAoICJwYXR0ZXJuIiA9PiAiL9C30LTQtdC70LBb0LvQvW/RjtC10YJdezEsMn0vdWkiLCAKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXNzYWdlIiA9PiAiLSDQn9GA0LjRgdGC0LDQstC60LggXCLQt1wiINC90LXRgiDQsiDRgNGD0YHRgdC60L7QvCDRj9C30YvQutC1LiIKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICApLCAgIAoJICAgICAgICAgICAgICAgICAzID0+IGFycmF5ICggInBhdHRlcm4iID0+ICIvXFxzK9CwXFxzKy91aSIgLCAKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXNzYWdlIiA9PiAiLSDQn9GA0L7Qv9GD0YnQtdC90LAg0LfQsNC/0Y/RgtCw0Y8g0L/QtdGA0LXQtCDRgdC+0Y7Qt9C+0LwgXCLQsFwiLiIKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAoJICAgICAgICAgICAgICAgICA0ID0+IGFycmF5ICggInBhdHRlcm4iID0+ICIvXFxzK9C90L5cXHMrL3VpIiwgCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXNzYWdlIiA9PiAiLSDQn9GA0L7Qv9GD0YnQtdC90LAg0LfQsNC/0Y/RgtCw0Y8g0L/QtdGA0LXQtCDRgdC+0Y7Qt9C+0LwgXCLQvdC+XCIuIgoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICksICAgCgkgICAgICAgICAgICAgICAgIDUgPT4gYXJyYXkgKCAicGF0dGVybiIgPT4gIi9bLFxcLiFcXD86O11bXlxcc10vdWkiLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVzc2FnZSIgPT4gIi0g0J/RgNC+0L/Rg9GJ0LXQvSDQv9GA0L7QsdC10Lsg0L/QvtGB0LvQtSDQt9C90LDQutCwINC/0YDQtdC/0LjQvdCw0L3QuNGPLiIKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICApLCAgICAgICAKCSAgICAgICAgICAgICAgICAgNiA9PiBhcnJheSAoICJwYXR0ZXJuIiA9PiAiL1thLdGP0ZFdKtC20Yt80YjRiy91aSIgLCAKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lc3NhZ2UiID0+ICItIFwi0JbQuC3QqNC4XCIg0L/QuNGI0Lgg0YEgXCLQuFwiISIKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAJICAgICAgICAgICAgICAgKTsKCiRlcnJzID0gYXJyYXkoKTsgLyrQn9GD0YHRgtC+0Lkg0LzQsNGB0YHQuNCyLCDQsiDQutC+0YLQvtGA0YvQuSDRgdC+0LHQuNGA0LDRjtGC0YHRjyDQvtGI0LjQsdC60LgqLwoKcHJlZ19tYXRjaF9hbGwoJHJlZ0V4cCwgJGNvb2xTdG9yeSwgJGVycnMpOwkvKtChINC/0L7QvNC+0YnRjNGOINGE0YPQvdC60YbQuNC4INCy0YvRgtCw0YHQutC40LLQsNC10Lwg0YDQtdCz0YPQu9GP0YDQutC+0Lkg0LjQtyDRgtC10LrRgdGC0LAg0LLRgdC1INC+0YjQuNCx0LrQuCDQuCDQt9Cw0L/QvtC70L3Rj9C10Lwg0LjQvNC4INC80LDRgdGB0LjQsiAkZXJycyovCgokbWF0Y2hlcyA9ICRlcnJzWzBdOyAvKtCe0L/RgNC10LTQtdC70Y/QtdC8INC/0LXRgNC10LzQtdC90L3Rg9GOINC00LvRjyDQstGB0LXRhSDQvtGI0LjQsdC+0LosINCy0YvRgtCw0YnQtdC90L3Ri9GFINC/0YDQtdC00YvQtNGD0YnQtdC5INGE0YPQvdC60YbQuNC10LkqLwoKJG51bWJlciA9IGNvdW50KCRtYXRjaGVzKTsgLyrQodGH0LjRgtCw0LXQvCDQutC+0LvQuNGH0LXRgdGC0LLQviDQvtGI0LjQsdC+0Log0LIg0YLQtdC60YHRgtC1Ki8KCnZhcl9kdW1wKCRtYXRjaGVzKTsKCmZvciAoJGk9MDsgJGkgPCAkbnVtYmVyOyAkaSsrKSB7IC8q0KbQuNC60Lsg0LTQu9GPINC/0L7QuNGB0LrQsCDQvtGI0LjQsdC+0Log0YEg0L/QvtC80L7RidGM0Y4g0L7RgtC00LXQu9GM0L3Ri9GFINGA0LXQs9GD0LvRj9GA0L7QuiAo0LrQu9GO0YfQtdC5KSDQsiDQvNCw0YHRgdC40LLQtSDQuCDQstGL0LLQvtC00LAg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNGFINGA0LXQs9GD0LvRj9GA0LrQsNC8INC/0YDQsNCy0LjQuyAo0LfQvdCw0YfQtdC90LjQuSDQsiDQvNCw0YHRgdC40LLQtSkqLwoKICAgIAlpZiAocHJlZ19tYXRjaCgkcG9zc2libGVFcnJvcnNbJGldWydwYXR0ZXJuJ10sICRtYXRjaGVzWyRpXSkpIHsgLyrQlNC+0YHRgtCw0ZHQvCDQuNC3INC80LDRgdGB0LjQstCwINGA0LXQs9GD0LvRj9GA0LrRgywg0L/QvtC00YHRgtCw0LLQu9GP0LXQvCDQtdGRINCyINGE0YPQvdC60YbQuNGOLCDQv9GA0L7QstC10YDRj9C10Lwg0L3QsNC50LTQtdC90L3Ri9C1INC+0YjQuNCx0LrQuCDQsiDQvNCw0YHRgdC40LLQtSAkbWF0Y2hlcyDQvdCwINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSovCiAgICAJCSRtZXNzYWdlID0gJHBvc3NpYmxlRXJyb3JzWyRpXVsnbWVzc2FnZSddOyAvKtCS0YvQstC+0LTQuNC8INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LXQtSDQv9GA0LDQstC40LvQviDQuNC3INC80LDRgdGB0LjQstCwICjRgdC+0LTQtdGA0LbQsNC90LjQtSkqLwogICAgCQkkcGF0dGVybiA9ICRtYXRjaGVzWyRpXTsKICAgIAkJZWNobyAieyRwYXR0ZXJufSDQuCB7JG1lc3NhZ2V9XG4iOzsKICAgIAkJZWNobyAiLi4uIiAuIG1iX3N1YnN0cigkY29vbFN0b3J5LCAkbWF0Y2hlc1skaV0gLSAxMCwgNjApIC4gIi4uLiAkbWVzc2FnZSBcbiI7CiAgICAJfQogICAgfQoKLy92YXJfZHVtcCgkcGF0dGVybik7Ci8vdmFyX2R1bXAoJG1lc3NhZ2UpOwo/Pgo=