fork(3) download
  1. <?php
  2.  
  3.  
  4. // $text = "Такая,знаете ли,мура получается с этим программированием но поначалу всё вроде шло хорошо!Даже замечательно! Но ведь в какой-то момент всегда начинаются проблемы, вы понимаете?А в этот раз они начались тогда,когда дошёл сначала до массивов;затем было сложно с циклами и массивами управляться сразу,но вполне ещё терпимо; потом вроде бы разобрался а думаете - это легко для гуманитария? Для гуманитария, может быть, и легко но для меня - нет. Мне как-то проще траллить технарей,чем стать на их уровень в программировании. У меня шырокий кругозор и шикарная жызненная позиция:непротивление насилию злом,но это, как ни странно, не помогает освоить программирование. Всё это весьма удручает,а также выбивает из колеи. А выбитый из колеи гуманитарий способен затралить любого,даже уравновешенного технаря-программиста на языке PHP. Это координально меняет ситуацию, описанную сдесь. Если же я зделаю всё так, как должно быть зделано, то все останутся целы.";
  5. $text = "Координально ты прав";
  6. $possibleErrors = array (
  7. 0 => array ( "pattern" => "/.{3,5}координально.{3,5}/ui",
  8. "message" => "- Ошибка в слове \"кардинально\"."
  9. ),
  10. 1 => array ( "pattern" => "/.{3,5}сдесь.{3,5}/ui",
  11. "message" => "- Не \"сдесь\", а \"здесь\"."
  12. ),
  13. 2 => array ( "pattern" => "/.{3,5}[^а-яё]здела[лнoюет]{1,2}.{3,5}/ui",
  14. "message" => "- Приставки \"з\" нет в русском языке."
  15. ),
  16. 3 => array ( "pattern" => "/.{3,5}[а-яёa-z]\\sа(\\s?|,|...| \\-).{3,5}/u",
  17. "message" => "- Пропущена запятая перед союзом \"а\"."
  18. ),
  19. 4 => array ( "pattern" => "/.{3,5}[а-яёa-z]\\sно(\\s?|,|...| \\-).{3,5}/u",
  20. "message" => "- Пропущена запятая перед союзом \"но\"."
  21. ),
  22. 5 => array ( "pattern" => "/.{3,5}[,\\.!\\?:;][^\\s].{3,5}/ui",
  23. "message" => "- Пропущен пробел после знака препинания."
  24. ),
  25. 6 => array ( "pattern" => "/.{3,5}(ж|ш)ы.{3,5}/ui" ,
  26. "message" => "- \"Жи-Ши\" пиши с \"и\"!"
  27. )
  28. );
  29. $regexpClean = array(
  30. '/\\,/' => ', ',
  31. '/\\;/' => '; ',
  32. '/\\!/' => '! ',
  33. '/\\?/' => '? ',
  34. '/\\:/' => ': ',
  35. '/жы/ui' => 'жи',
  36. '/шы/ui' => 'ши',
  37. '/координально/ui' => 'кардинально',
  38. '/сдесь/ui' => 'здесь',
  39. '/зделал/ui' => 'сделал',
  40. '/зделаю/ui' => 'сделаю',
  41. '/зделано/ui' => 'сделано',
  42. '/зделать/ui' => 'сделать',
  43. '/ а /u' => ', а ',
  44. '/ а, /u' => ', а, ',
  45. '/ а \\-/u' => ', а \\-',
  46. '/ а\\.\\.\\./u' => ', а...',
  47. '/ но /u' => ', но ',
  48. '/ но, /u' => ', но, ',
  49. '/ но \\-/u' => ', но \\-',
  50. '/ но\\.\\.\\./u' => ', но...',
  51. '/,\\s?,/u' => ',',
  52. '/;,/u' => ';',
  53. '/:,/u' => ':',
  54. '/\\s\\s/ui' => ' '
  55. );
  56. $possibleErrorsCount = count($possibleErrors); /*Считаем количество регулярных выражений в массиве*/
  57.  
  58. for ($i=0; $i < $possibleErrorsCount; $i++) { /*Цикл для поиска ошибок с помощью отдельных регулярок (ключей) в массиве и вывода соответствующих регуляркам правил (значений в массиве)*/
  59.  
  60. if (preg_match_all($possibleErrors[$i]['pattern'], $text, $matches)) { /*Достаём из массива регулярку, подставляем её в функцию, проверяем найденные ошибки в тексте $text на соответствие*/
  61. $message = $possibleErrors[$i]['message']; /*Выводим соответствующее правило из массива (содержание), чтобы вывести его затем в echo*/
  62. $pattern = $possibleErrors[$i]['pattern']; /*Выводим соответствующую регулярку из массива (ключ)*/
  63. $cleanMatches = $matches[0]; /*Упрощаем получившийся массив с ошибками для возможности последующего вывода ошибок*/
  64.  
  65. foreach ($cleanMatches as $key => $value) { /*Цикл для извлечения ошибок из массива и вывода их в echo*/
  66.  
  67. echo "...{$value}... {$message}\n";
  68. }
  69. }
  70. }
  71.  
  72. foreach ($regexpClean as $regexp => $correct) {/*Цикл для преобразования массива с отдельными регулярками в ключи и значения*/
  73. $text = preg_replace($regexp, $correct, $text); /*Переменная с текстом, в котором с помощью preg_replace подставляются отдельные регулярки и соответствующие им заменяемые варианты правильного текста; в итоге переменная меняется при прохождении цикла, поэтому итоговый вывод исправленного текста мы делаем за пределами этого цикла*/
  74. }
  75. echo "Исправленный текст:\n{$text}\n";
  76.  
  77. ?>
  78.  
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
Исправленный текст:
кардинально ты прав