<?php
$offset = 10 ; // конфиг длины строки, которой дополняется место ошибки
// не могу придумать внятное имя
// впрочем для каждого вида ошибки он должен быть свой
$possibleErrors = [
[
'regExp' => "/.{0,{$offset} }\b\w+[,;!?:]\S+\b.{0,{$offset} }/ui" ,
'descr' => 'Нет пробела после запятой, точки с запятой, восклицательного знака, ' .
'вопросительного знака, двоеточия.' ,
] ,
[
'regExp' => "/.{0,{$offset} }\b\w*[жш]ы\w*\b.{0,{$offset} }/ui" ,
'descr' => 'Жи/ши написано через "ы".' ,
] ,
[
'regExp' => "/.{0,{$offset} }\bкоординально\b.{0,{$offset} }/ui" ,
'descr' => 'Ошибка в слове "кардинально."' ,
] ,
[
'regExp' => "/.{0,{$offset} }\b(сдесь|зделан|зделаю)\b.{0,{$offset} }/ui" ,
'descr' => 'Неправильная приставка c-/з-.' ,
] ,
[
'regExp' => "/.{0,{$offset} }[^.!?;:—,]\s\b(но|а)\b.{0,{$offset} }/ui" ,
'descr' => 'Пропущена запятая перед предлогом "а" или "но".' ,
] ,
] ;
$text = 'Тут координально пропущен пробел,после запятой но перед точкой' .
'Слово пушыстый сдесь написано с ошыбкой.' ;
foreach ( $possibleErrors as $error ) {
$matches = [ ] ;
foreach ( $matches [ 0 ] as $match ) {
echo $error [ 'descr' ] . " Место с ошибкой: \n >> {$match} \n \n " ;
}
}
PD9waHAgCiRvZmZzZXQgPSAxMDsgLy8g0LrQvtC90YTQuNCzINC00LvQuNC90Ysg0YHRgtGA0L7QutC4LCDQutC+0YLQvtGA0L7QuSDQtNC+0L/QvtC70L3Rj9C10YLRgdGPINC80LXRgdGC0L4g0L7RiNC40LHQutC4Ci8vINC90LUg0LzQvtCz0YMg0L/RgNC40LTRg9C80LDRgtGMINCy0L3Rj9GC0L3QvtC1INC40LzRjwovLyDQstC/0YDQvtGH0LXQvCDQtNC70Y8g0LrQsNC20LTQvtCz0L4g0LLQuNC00LAg0L7RiNC40LHQutC4INC+0L0g0LTQvtC70LbQtdC9INCx0YvRgtGMINGB0LLQvtC5CgokcG9zc2libGVFcnJvcnMgPSBbCglbCgkJJ3JlZ0V4cCcgPT4gIi8uezAseyRvZmZzZXR9fVxiXHcrWyw7IT86XVxTK1xiLnswLHskb2Zmc2V0fX0vdWkiLAoJCSdkZXNjcicgPT4gJ9Cd0LXRgiDQv9GA0L7QsdC10LvQsCDQv9C+0YHQu9C1INC30LDQv9GP0YLQvtC5LCDRgtC+0YfQutC4INGBINC30LDQv9GP0YLQvtC5LCDQstC+0YHQutC70LjRhtCw0YLQtdC70YzQvdC+0LPQviDQt9C90LDQutCwLCAnLgoJCQkJCSfQstC+0L/RgNC+0YHQuNGC0LXQu9GM0L3QvtCz0L4g0LfQvdCw0LrQsCwg0LTQstC+0LXRgtC+0YfQuNGPLicsCgldLAoJWwoJCSdyZWdFeHAnID0+ICIvLnswLHskb2Zmc2V0fX1cYlx3KlvQttGIXdGLXHcqXGIuezAseyRvZmZzZXR9fS91aSIsCgkJJ2Rlc2NyJyA9PiAn0JbQuC/RiNC4INC90LDQv9C40YHQsNC90L4g0YfQtdGA0LXQtyAi0YsiLicsCgldLAoJWwoJCSdyZWdFeHAnID0+ICIvLnswLHskb2Zmc2V0fX1cYtC60L7QvtGA0LTQuNC90LDQu9GM0L3QvlxiLnswLHskb2Zmc2V0fX0vdWkiLAoJCSdkZXNjcicgPT4gJ9Ce0YjQuNCx0LrQsCDQsiDRgdC70L7QstC1ICLQutCw0YDQtNC40L3QsNC70YzQvdC+LiInLAoJXSwKCVsKCQkncmVnRXhwJyA9PiAiLy57MCx7JG9mZnNldH19XGIo0YHQtNC10YHRjHzQt9C00LXQu9Cw0L180LfQtNC10LvQsNGOKVxiLnswLHskb2Zmc2V0fX0vdWkiLAoJCSdkZXNjcicgPT4gJ9Cd0LXQv9GA0LDQstC40LvRjNC90LDRjyDQv9GA0LjRgdGC0LDQstC60LAgYy0v0LctLicsCgldLAoJWwoJCSdyZWdFeHAnID0+ICIvLnswLHskb2Zmc2V0fX1bXi4hPzs64oCULF1cc1xiKNC90L580LApXGIuezAseyRvZmZzZXR9fS91aSIsCgkJJ2Rlc2NyJyA9PiAn0J/RgNC+0L/Rg9GJ0LXQvdCwINC30LDQv9GP0YLQsNGPINC/0LXRgNC10LQg0L/RgNC10LTQu9C+0LPQvtC8ICLQsCIg0LjQu9C4ICLQvdC+Ii4nLAoJXSwKXTsKCiR0ZXh0ID0gJ9Ci0YPRgiDQutC+0L7RgNC00LjQvdCw0LvRjNC90L4g0L/RgNC+0L/Rg9GJ0LXQvSDQv9GA0L7QsdC10Lss0L/QvtGB0LvQtSDQt9Cw0L/Rj9GC0L7QuSDQvdC+INC/0LXRgNC10LQg0YLQvtGH0LrQvtC5Jy4KCQkn0KHQu9C+0LLQviDQv9GD0YjRi9GB0YLRi9C5INGB0LTQtdGB0Ywg0L3QsNC/0LjRgdCw0L3QviDRgSDQvtGI0YvQsdC60L7QuS4nOwoKZm9yZWFjaCAoJHBvc3NpYmxlRXJyb3JzIGFzICRlcnJvcikgewoJJG1hdGNoZXMgPSBbXTsKCXByZWdfbWF0Y2hfYWxsKCRlcnJvclsncmVnRXhwJ10sICR0ZXh0LCAkbWF0Y2hlcyk7Cglmb3JlYWNoICgkbWF0Y2hlc1swXSBhcyAkbWF0Y2gpIHsKCQllY2hvICRlcnJvclsnZGVzY3InXSAuICIg0JzQtdGB0YLQviDRgSDQvtGI0LjQsdC60L7QuTogXG4+PiB7JG1hdGNofVxuXG4iOyAKCX0KfQo=