fork download
  1. <?php
  2.  
  3.  
  4. $text = <<<EOF
  5. Падали листья,осень пришла. Список: один;два; Наступала зима!Пара кутаться в шарф?Друг ответил:нет! Всплыла шырокая улыбка. Жыви и радуйся теплу! Нам нужно координально поменять жизнь. Сдесь что-то не так. Зделал проект или зделаешь завтра? Давно уже зделан. Второй проект а не первый! Будет сделан но завтра не обещаю!
  6. EOF
  7. ;
  8.  
  9. $foundErrors = [];
  10. $errorWithContext = ''; // Шаблон для поиска ошибки с контектом
  11. $startEndError = ['@^/@', '@/u@']; // Начало и конец шаблона для поиска ошибки
  12. $leftAndRightContext = ['/\w+\.?\s?', '\.?\s?\w+/u']; // Контекст ошибки
  13.  
  14. $grammarErrors = [
  15. //шаблон для поиска ошибки, замена, описание ошибки
  16. ['/(\w)(,|;|!|:|\?)(\w)/ui', '$1$2 $3', 'Нет пробела после знака препинания:'],
  17. ['/(ж|ш)(ы)/ui', '$1и', 'Жи Ши с буквой И:'],
  18. ['/координально/ui', 'кардинально', 'Правильно - кардинально:'],
  19. ['/Сдесь/u', 'Здесь', 'Правильно - здесь:'], // вариант с большой буквой указываем первым и отдельно
  20. ['/сдесь/ui', 'здесь', 'Правильно - здесь:'],
  21. ['/З(дел)(ал|аешь|ан)/u', 'С$1$2', 'Сделать с буквой С:'], // вариант с большой буквой указываем первым и отдельно
  22. ['/з(дел)(ал|аешь|ан)/ui', 'с$1$2', 'Сделать с буквой С:'],
  23. ['/(\w)\s(а|но)/ui', '$1, $2', 'Перед А и НО запятая:'],
  24.  
  25. ];
  26.  
  27. echo "{$text}\n\n";
  28.  
  29. foreach ($grammarErrors as $rule) {
  30.  
  31. $errorWithContext = preg_replace($startEndError, $leftAndRightContext, $rule[0]);
  32.  
  33. preg_match_all($errorWithContext, $text, $foundErrors);
  34.  
  35. if(!empty($foundErrors[0])) {
  36.  
  37. echo "{$rule[2]}\n";
  38.  
  39. foreach ($foundErrors[0] as $error) {
  40. echo "\t{$error}\n";
  41. }
  42.  
  43. $text = preg_replace($rule[0], $rule[1], $text);
  44. }
  45. }
  46.  
  47. echo "\n{$text}\n";
Success #stdin #stdout 0.01s 82624KB
stdin
Standard input is empty
stdout
Падали листья,осень пришла. Список: один;два; Наступала зима!Пара кутаться в шарф?Друг ответил:нет! Всплыла шырокая улыбка. Жыви и радуйся теплу! Нам нужно координально поменять жизнь. Сдесь что-то не так. Зделал проект или зделаешь завтра? Давно уже зделан. Второй проект а не первый! Будет сделан но завтра не обещаю!

Нет пробела после знака препинания:
	листья,осень
	один;два
	зима!Пара
	шарф?Друг
	ответил:нет
Жи Ши с буквой И:
	Всплыла шырокая
	улыбка. Жыви
Правильно - кардинально:
	нужно координально поменять
Правильно - здесь:
	жизнь. Сдесь что
Сделать с буквой С:
	так. Зделал проект
Сделать с буквой С:
	или зделаешь завтра
	уже зделан. Второй
Перед А и НО запятая:
	проект а не
	сделан но завтра

Падали листья, осень пришла. Список: один; два; Наступала зима! Пара кутаться в шарф? Друг ответил: нет! Всплыла широкая улыбка. Живи и радуйся теплу! Нам нужно кардинально поменять жизнь. Здесь что-то не так. Сделал проект или сделаешь завтра? Давно уже сделан. Второй проект, а не первый! Будет сделан, но завтра не обещаю!