fork(9) 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. /*
  18. EOF
  19. ;*/
  20. $regExp = "/координально|сдесь|здела[лнюет]{1,2}|\\s+а\\s+|\\s+но\\s+|[,\\.!\\?:;][^\\s]|[a-яё]*жы|шы/iu";
  21.  
  22. $possibleErrors = array(
  23. "/координально/ui" => "- Ошибка в слове \"кардинально\".",
  24. "/сдесь/ui" => "- Не \"сдесь\", а \"здесь\".",
  25. "/здела[лнюет]{1,2}/ui" => "- Приставки \"з\" нет в русском языке.",
  26. "/\\s+а\\s+/ui" => "- Пропущена запятая перед союзом \"а\".",
  27. "/\\s+но\\s+/ui" => "- Пропущена запятая перед союзом \"но\".",
  28. "/[a-яё]*жы|шы/ui" => "\"- Жи-Ши\" пиши с \"и\"!",
  29. "/[,\\.!\\?:;][^\\s]/ui" => "- Пропущен пробел после знака препинания."
  30. );
  31. /*
  32. $possibleErrors = array (
  33. 1 => array ( "pattern" => "/координально/ui",
  34. "message" => "- Ошибка в слове \"кардинально\"."
  35. ),
  36. 2 => array ( "pattern" => "/сдесь/ui",
  37. "message" => "- Не \"сдесь\", а \"здесь\"."
  38. ),
  39. 3 => array ( "pattern" => "/здела[лнюет]{1,2}/ui",
  40. "message" => "- Приставки \"з\" нет в русском языке."
  41. ),
  42. 4 => array ( "pattern" => "/\\s+а\\s+/ui" ,
  43. "message" => "- Пропущена запятая перед союзом \"а\"."
  44. ),
  45. 5 => array ( "pattern" => "/\\s+но\\s+/ui",
  46. "message" => "- Пропущена запятая перед союзом \"но\"."
  47. ),
  48. 6 => array ( "pattern" => "/[,\\.!\\?:;][^\\s]/ui",
  49. "message" => "- Пропущен пробел после знака препинания."
  50. ),
  51. 7 => array ( "pattern" => "/[a-яё]*жы|шы/ui" ,
  52. "message" => "- \"Жи-Ши\" пиши с \"и\"!"
  53. ),
  54.  
  55. ); */
  56. $errs = array();
  57.  
  58. /*foreach ($possibleErrors as $pattern => $message) { */
  59. preg_match_all($regExp, $coolStory, $errs, PREG_OFFSET_CAPTURE);
  60. //}
  61. /*foreach ($possibleErrors as $pattern => $message) {
  62. $matches = preg_grep($pattern, $errs);
  63. }
  64. */
  65. /*var_dump($errs); */
  66. $matches = $errs[0];
  67. var_dump($matches);
  68. $number = count($matches);
  69. /*var_dump($number); */
  70.  
  71.  
  72. for ($i=0; $i < $number; $i++) {
  73. /*echo $matches[$i][0] . " - "; */
  74. foreach ($possibleErrors as $key => $value) {
  75. /*echo $key . "\n"; */
  76. if (preg_match($key, $matches[$i][0])) {
  77. $position = $matches[$i][1] - 30;
  78. /*echo $position."\n"; */
  79. echo "...";
  80. $context = mb_substr($coolStory, $position, 60);
  81. echo $context ."\n";
  82. echo "...";
  83. echo $value;
  84.  
  85. break;
  86. /*echo "\n Есть совпадение \n"; */
  87. }
  88. }
  89. }
  90.  
  91. /*
  92. $matches = $errs[0];
  93. $number = count($matches);
  94. var_dump($number);
  95.  
  96. for ($i=0; $i < count($matches); $i++) {
  97.   foreach ($possibleErrors as $pattern => $message) {
  98.   if (preg_match($pattern, $matches[$i][0])) {
  99.   echo "..." . mb_substr($coolStory, $matches[$i][1] - 10, 20) . "... $message \n";
  100.   }
  101.   }
  102. }
  103. ?>
  104. */
  105. ?>
Success #stdin #stdout 0.03s 52480KB
stdin
Standard input is empty
stdout
array(10) {
  [0]=>
  array(2) {
    [0]=>
    string(4) "Жы"
    [1]=>
    int(20)
  }
  [1]=>
  array(2) {
    [0]=>
    string(24) "координально"
    [1]=>
    int(123)
  }
  [2]=>
  array(2) {
    [0]=>
    string(10) "сдесь"
    [1]=>
    int(212)
  }
  [3]=>
  array(2) {
    [0]=>
    string(14) "зделают"
    [1]=>
    int(292)
  }
  [4]=>
  array(2) {
    [0]=>
    string(6) " но "
    [1]=>
    int(541)
  }
  [5]=>
  array(2) {
    [0]=>
    string(4) " А "
    [1]=>
    int(1382)
  }
  [6]=>
  array(2) {
    [0]=>
    string(3) ",о"
    [1]=>
    int(1748)
  }
  [7]=>
  array(2) {
    [0]=>
    string(3) ".П"
    [1]=>
    int(2573)
  }
  [8]=>
  array(2) {
    [0]=>
    string(7) " но  "
    [1]=>
    int(3286)
  }
  [9]=>
  array(2) {
    [0]=>
    string(4) " а "
    [1]=>
    int(3358)
  }
}
...Пикрандом.
..."- Жи-Ши" пиши с "и"!...г, нет, даже не так. Так  сдесь как у меня никогда не было д
...- Ошибка в слове "кардинально"....ржался, снимал только шлюх. Я решил зарегаться на мамбе и по
...- Не "сдесь", а "здесь"....В общем ничего толком не вышло из этого, но мне начали писат
...- Приставки "з" нет в русском языке....и понял, что от этого нихуевый профит + этот кун какой-то фи
...- Пропущена запятая перед союзом "но"....увствовал, ни боли, ни удовольствия, так наше соитие с ласка
...- Пропущена запятая перед союзом "а"....т и тому подобное, ибо он при деньгах и довольно милый. Или 
...- Пропущен пробел после знака препинания....
...- Пропущен пробел после знака препинания....
...- Пропущена запятая перед союзом "но"....
...- Пропущена запятая перед союзом "а".