fork download
  1. <?php
  2. header("Content-Type: text/plain");
  3.  
  4. // Текст:
  5. $text = <<<EOF
  6. нет пробела после запятой,точки с запятой;восклицательного знака!вопросительного знака?двоеточия:
  7. «жы» или «шы» написано с буквой ы,
  8. в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан»
  9. в тексте есть слова а или но без запятой перед ними.
  10. EOF
  11. ;
  12.  
  13. // Массив патернов поиска и описаний и исправлений ошибок
  14. $regexpArray = array(
  15. array('regexp' => '/(\\S+)(,|;|!|[?]|:)(\\S+)/u', 'explain' => 'нет обязательного пробела после «.,!?;:»', 'replace' => '$1$2 $3'),
  16. array('regexp' => '/(\\S*)([ ]*)(\\S*)(ж|ш)ы(\\S*)([ ]*)(\\S*)/u', 'explain' => '«жи» или «ши» написано с буквой ы', 'replace' => '$1$2$3$4и$5$6$7'),
  17. array('regexp' => '/(координально)/u', 'explain' => 'орфографические ошибки в словах', 'replace' => 'кардинально'),
  18. array('regexp' => '/(сдесь)/u', 'explain' => 'орфографическая ошибка №1 в слове', 'replace' => 'здесь'),
  19. array('regexp' => '/(здела)(\\w+)/u', 'explain' => 'орфографическая ошибка №2 в слове', 'replace' => 'сдела'),
  20. array('regexp' => '/(\\S*)([^,])([ ])(но|а)(\\s)/u', 'explain' => 'союзы А или НО без запятой перед ними', 'replace' => '$1$2,$3$4$5')
  21. );
  22.  
  23. // Выводим кусок текста с ошибкой
  24. foreach ($regexpArray as $key => $value) {
  25.  
  26. if (preg_match_all($regexpArray[$key]['regexp'], $text, $result, PREG_SET_ORDER)) {
  27.  
  28. echo "\nОшибка: {$regexpArray[$key]['explain']}\n";
  29.  
  30. foreach ($result as $e) {
  31. echo "*{$e[0]}*\n";
  32. }
  33. }
  34. }
  35.  
  36. // Исправляем ошибки в тексте
  37. foreach ($regexpArray as $key => $value) {
  38. $text = preg_replace ($regexpArray[$key]['regexp'], $regexpArray[$key]['replace'], $text);
  39. }
  40. echo "\nИсправленный текст:\n{$text}";
  41. ?>
  42.  
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
Ошибка: нет обязательного пробела после «.,!?;:»
*запятой,точки*
*запятой;восклицательного*
*знака!вопросительного*
*знака?двоеточия:*

Ошибка: «жи» или «ши» написано с буквой ы
*«жы» или*
* «шы» написано*

Ошибка: орфографические ошибки в словах
*координально*

Ошибка: орфографическая ошибка №1 в слове
*сдесь*

Ошибка: орфографическая ошибка №2 в слове
*зделал*
*зделаю*
*зделан*

Ошибка: союзы А или НО без запятой перед ними
*слова а *
*или но *

Исправленный текст:
нет пробела после запятой, точки с запятой; восклицательного знака! вопросительного знака? двоеточия:
«жи» или «ши» написано с буквой ы,
в тексте есть слово «кардинально» или «здесь», «сдела», «сдела», «сдела»
в тексте есть слова, а или, но без запятой перед ними.