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

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

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

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

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

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

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

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

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