fork(4) download
  1. <?php
  2. /*Напиши скрипт, проверяющий текст на наличие злостных ошибок:
  3. нет пробела после запятой, точки с запятой, восклицательного знака, вопросительного знака, двоеточия
  4. «жи» или «ши» написано с буквой ы
  5. в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан»
  6. в тексте есть слова «а» или «но» без запятой перед ними.
  7. (можешь добавить еще несколько правил, если хорошо знаешь русский язык)
  8. В случае обнаружения ошибки скрипт должен писать сообщение об этом и выводить кусок текста с ошибкой
  9. (чтобы было понятно, что не так).*/
  10.  
  11. $text = "Привет,шыр!труд:Жыр?пассаЖЫР;зделаю Координально но, например сдесь решена проблема ушыбов.
  12. Зделано многое а? ведь это зделал я";
  13.  
  14. $rules = [
  15. ['regexp' => '/[,;!?:][^,;!?:\\s]+/u', 'comment' => 'отсутствие пробелов'],
  16. ['regexp' => '/[а-яё]*(?:ж|ш)ы[а-яё]*/ui', 'comment' => 'написание жи-ши'],
  17. ['regexp' => '/координально|сдесь|здела(?:л|ю|н)\\S*/ui', 'comment' => 'орфографические'],
  18. ['regexp' => '/\\S*[^,]\\s(?:а|но).?/ui', 'comment' => 'пунктуация']
  19. ];
  20.  
  21. foreach ($rules as $rule){
  22.  
  23. $matches = array();
  24. $count = preg_match_all($rule['regexp'], $text, $matches);
  25. if ($count){
  26. echo "Нашлись ошибки ({$rule['comment']}) {$count} шт :\n";
  27. foreach ($matches[0] as $mistake){
  28. echo "{$mistake}\t";
  29. };
  30. echo "\n";
  31. } else {
  32. echo "Ошибки ({$rule['comment']}) отсутствуют\n";
  33. }
  34. }
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
Нашлись ошибки (отсутствие пробелов) 5 шт :
,шыр	!труд	:Жыр	?пассаЖЫР	;зделаю	
Нашлись ошибки (написание жи-ши) 4 шт :
шыр	Жыр	пассаЖЫР	ушыбов	
Нашлись ошибки (орфографические) 5 шт :
зделаю	Координально	сдесь	Зделано	зделал	
Нашлись ошибки (пунктуация) 2 шт :
Координально но,	многое а?