fork(3) download
  1. <?php
  2. /*«Grammar Nazi». Напиши скрипт, проверяющий текст на наличие злостных ошибок:
  3.  
  4. нет пробела после запятой, точки с запятой, восклицательного знака, вопросительного знака, двоеточия
  5. «жи» или «ши» написано с буквой ы
  6. в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан»
  7. в тексте есть слова «а» или «но» без запятой перед ними.
  8. (можешь добавить еще несколько правил, если хорошо знаешь русский язык)
  9.  
  10. В случае обнаружения ошибки скрипт должен писать сообщение об этом и выводить кусок текста с ошибкой (чтобы было понятно, что не так).*/
  11.  
  12.  
  13. $coolStory = <<<EOF
  14. Утра, анон. Жывотные Хочу принести вам прохладную. В общем захотел координально я найти денег, нет, даже не так. Так как у меня сдесь никогда не было девушек, за руку не держался, снимал только шлюх. Я решил зарегаться на мамбе и посмотреть там тянок. В общем ничего толком не вышло из этого, но мне начали писать парни с целью ебли, некоторые предлогали деньги. И вот попался один довольно няшный кун. Вследствие чего я смог заработать 10к деревяных за ночь. Мне был окак-то все равно, что с мужиком и понял, что от этого нихуевый профит + этот кун какой-то финансовый директор. В общем списались, после созвонились и я приехал к концу рабочего дня к нему на работу, пили водку, разговаривали, он довольно умный, интересно было с ним болтать, там долго сидели. Ну А скажу сразу, что я еблан и взял деньги только утром, то есть после моей работы, это была ммоя первая ошибка. Так что мы пили, разговаривали о политике, немного о религии, эволюцию, спорт и тому подобное,он еще аниму смотрит иногда и гоняет в старкрафт, через несколько часов мы поебались в каком-то конференц-зале, ничего особенного, ожидал большего, сисурити. Тут вторая была моя ошибка. что не сказал ему одеть гондон, кстати, сосать член довольно легко и не противно, тем более он относительно скорострел, так что после минут 5-7 я был сверху, потом снизу, так же мало чего чувствовал, ни боли, ни удовольствия, так наше соитие с ласками продолжались минут 20.После он засунл, я рядом в обнимку, довольно мило. После я проснулся и сидел за пекой у него и кушал. После он проснулся, я сказал про деньги, он мне их отдал и я пошел домой, он сказал, что вечером созвонимся. Щас мысль идет с него брать деньги + гулять и сидеть в кафе за его счет и тому подобное, ибо он при деньгах и довольно милый. Или же искать еще "клиентов".
  15. Реквестую ваши стори о похождениях но и спрашиваю советы, что и как дальше зделать и как действовать.
  16. Пикрандом.
  17. EOF
  18. ;
  19. $regExp = "/(координально)|(сдесь)|(здела[лнюеть]{1,2})|([а-яё]{1}\\s+а\\s+)|([а-яё]{1}\\s+но\\s+)|([,\\.!\\?:;][^\\s])|(\\s?[а-яё]*(жы|шы)[а-яё]*[\\s\\.,?!:;]+)/iUu";
  20. /*
  21. $possibleErrors = array (
  22. 1 => array ( "pattern" => "/координально/ui",
  23. "message" => "- Ошибка в слове \"кардинально\"."
  24. ),
  25. 2 => array ( "pattern" => "/сдесь/ui",
  26. "message" => "- Не \"сдесь\", а \"здесь\"."
  27. ),
  28. 3 => array ( "pattern" => "/здела[лнюет]{1,2}/ui",
  29. "message" => "- Приставки \"з\" нет в русском языке."
  30. ),
  31. 4 => array ( "pattern" => "/\\s+а\\s+/ui" ,
  32. "message" => "- Пропущена запятая перед союзом \"а\"."
  33. ),
  34. 5 => array ( "pattern" => "/\\s+но\\s+/ui",
  35. "message" => "- Пропущена запятая перед союзом \"но\"."
  36. ),
  37. 6 => array ( "pattern" => "/[,\\.!\\?:;][^\\s]/ui",
  38. "message" => "- Пропущен пробел после знака препинания."
  39. ),
  40. 7 => array ( "pattern" => "/\\s?[а-яё]*(жы|шы)[а-яё]*[\\s\\.,?!:;]+/" ,
  41. "message" => "- \"Жи-Ши\" пиши с \"и\"!"
  42. ),
  43.  
  44. ); */
  45. $possibleErrors = array(
  46. "/координально/uUi" => " - Ошибка в слове \"кардинально\".",
  47. "/сдесь/uUi" => " - Не \"сдесь\", а \"здесь\".",
  48. "/здела[лнюеть]{1,2}/uUi" => " - Приставки \"з\" нет в русском языке.",
  49. "/[а-яё]{1}\\s+а\\s+/uUi" => " - Пропущена запятая перед союзом \"а\".",
  50. "/[а-яё]{1}\\s+но\\s+/uUi" => " - Пропущена запятая перед союзом \"но\".",
  51. "/\\s?[а-яё]*(жы|шы)[а-яё]*[\\s\\.,?!:;]+/uUi" => " \"- Жи-Ши\" пиши с \"и\"!",
  52. "/[,\\.!\\?:;][^\\s]/uUi" => " - Пропущен пробел после знака препинания."
  53. );
  54. echo $coolStory . "\n\n";
  55. $errs = array();
  56. preg_match_all($regExp, $coolStory, $errs);
  57. $matches = $errs[0];
  58. $notices = array();
  59.  
  60. for ($i = 0; $i < count($matches); $i++) {
  61. foreach ($possibleErrors as $pattern => $message) {
  62. if (preg_match($pattern, $matches[$i])) {
  63. $notices[$i] = $message;
  64. }
  65. }
  66.  
  67. }
  68. $i = 0;
  69.  
  70. foreach ($matches as $value) {
  71. $position = (mb_strpos($coolStory, $value) < 20) ? 0 : mb_strpos($coolStory, $value) - 20;
  72.  
  73. $length = ($position == 0) ? mb_strpos($coolStory, $value) : 20;
  74.  
  75. $contextPrev = mb_substr($coolStory, $position, $length);
  76. $errNo = $i + 1;
  77. $contextFollow = mb_substr($coolStory, $position + $length + mb_strlen($value), 30);
  78. echo "Ошибка" . $errNo . ":\"...";
  79. echo $contextPrev . $value . "$contextFollow...\"";
  80. echo $notices[$i] . "\n";
  81. $i++;
  82. }
  83.  
  84. /*var_dump($errs); */
  85.  
  86.  
  87.  
  88. ?>
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
Утра, анон. Жывотные Хочу принести вам прохладную. В общем захотел координально я найти денег, нет, даже не так. Так  как у меня сдесь никогда не было девушек, за  руку не держался, снимал только шлюх. Я решил зарегаться на мамбе и посмотреть там тянок. В общем ничего толком не вышло из этого, но мне начали писать парни с целью ебли, некоторые предлогали деньги. И вот попался один довольно няшный кун. Вследствие чего я смог заработать 10к деревяных за ночь. Мне был окак-то все равно, что с мужиком и понял, что от этого нихуевый профит + этот кун какой-то финансовый директор. В общем списались, после созвонились и я приехал к концу рабочего дня к нему на работу, пили водку, разговаривали, он довольно умный, интересно было с ним болтать, там долго сидели. Ну А скажу сразу, что я еблан и взял деньги только утром, то есть после моей работы, это была ммоя первая ошибка. Так что мы пили, разговаривали о политике, немного о религии, эволюцию, спорт и тому подобное,он еще аниму смотрит иногда и гоняет в старкрафт, через несколько часов мы поебались в каком-то конференц-зале, ничего особенного, ожидал большего, сисурити. Тут вторая была моя ошибка. что не сказал ему одеть гондон, кстати, сосать член довольно легко и не противно, тем более он относительно скорострел, так что после минут 5-7 я был сверху, потом снизу, так же мало чего чувствовал, ни боли, ни удовольствия, так наше соитие с ласками продолжались минут 20.После он засунл, я рядом в обнимку, довольно мило. После я проснулся и сидел за пекой у него и кушал. После он проснулся, я сказал про деньги, он мне их отдал и я пошел домой, он сказал, что вечером созвонимся. Щас мысль идет с него брать деньги + гулять и сидеть в кафе за его счет и тому подобное, ибо он при деньгах и довольно милый. Или же искать еще "клиентов".
Реквестую ваши стори о похождениях но  и спрашиваю советы, что и как дальше зделать и как действовать.
Пикрандом.

Ошибка1:"...Утра, анон. Жывотные Хочу принести вам прохладную. ..." "- Жи-Ши" пиши с "и"!
Ошибка2:"...ую. В общем захотел координально я найти денег, нет, даже не т..." - Ошибка в слове "кардинально".
Ошибка3:"...ак. Так  как у меня сдесь никогда не было девушек, за  ..." -  Не "сдесь", а "здесь".
Ошибка4:"... там долго сидели. Ну А скажу сразу, что я еблан и взя..." - Пропущена запятая перед союзом "а".
Ошибка5:"...порт и тому подобное,он еще аниму смотрит иногда и г..." - Пропущен пробел после знака препинания.
Ошибка6:"...родолжались минут 20.После он засунл, я рядом в обни..." - Пропущен пробел после знака препинания.
Ошибка7:"...и стори о похождениях но  и спрашиваю советы, что и как..." - Пропущена запятая перед союзом "но".
Ошибка8:"...ы, что и как дальше зделать и как действовать.
Пикрандом..." - Приставки "з" нет в русском языке.