fork(3) download
  1. <?php
  2.  
  3.  
  4. $coolStory = "Координально сдесь.";
  5.  
  6. $regExp = '/координально|сдесь|здела[лнюет]{1,2}|\\s+а\\s+|\\s+но\\s+|[,\\.!\\?:;][^\\s]|[a-яё]*жы|шы/iu';
  7.  
  8. $possibleErrors = array (
  9. 0 => array ( "pattern" => "/координально/ui",
  10. "message" => "- Ошибка в слове \"кардинально\"."
  11. ),
  12. 1 => array ( "pattern" => "/сдесь/ui",
  13. "message" => "- Не \"сдесь\", а \"здесь\"."
  14. ),
  15. 2 => array ( "pattern" => "/здела[лнoюет]{1,2}/ui",
  16. "message" => "- Приставки \"з\" нет в русском языке."
  17. ),
  18. 3 => array ( "pattern" => "/\\s+а\\s+/ui" ,
  19. "message" => "- Пропущена запятая перед союзом \"а\"."
  20. ),
  21. 4 => array ( "pattern" => "/\\s+но\\s+/ui",
  22. "message" => "- Пропущена запятая перед союзом \"но\"."
  23. ),
  24. 5 => array ( "pattern" => "/[,\\.!\\?:;][^\\s]/ui",
  25. "message" => "- Пропущен пробел после знака препинания."
  26. ),
  27. 6 => array ( "pattern" => "/[a-яё]*жы|шы/ui" ,
  28. "message" => "- \"Жи-Ши\" пиши с \"и\"!"
  29. )
  30. );
  31.  
  32. $errs = array(); /*Пустой массив, в который собираются ошибки*/
  33.  
  34. preg_match_all($regExp, $coolStory, $errs); /*С помощью функции вытаскиваем регуляркой из текста все ошибки и заполняем ими массив $errs*/
  35.  
  36. $matches = $errs[0]; /*Определяем переменную для всех ошибок, вытащенных предыдущей функцией*/
  37.  
  38. $number = count($matches); /*Считаем количество ошибок в тексте*/
  39.  
  40. var_dump($matches);
  41.  
  42. for ($i=0; $i < $number; $i++) { /*Цикл для поиска ошибок с помощью отдельных регулярок (ключей) в массиве и вывода соответствующих регуляркам правил (значений в массиве)*/
  43.  
  44. if (preg_match($possibleErrors[$i]['pattern'], $matches[$i])) { /*Достаём из массива регулярку, подставляем её в функцию, проверяем найденные ошибки в массиве $matches на соответствие*/
  45. $message = $possibleErrors[$i]['message']; /*Выводим соответствующее правило из массива (содержание)*/
  46. $pattern = $matches[$i];
  47. echo "{$pattern} и {$message}\n";;
  48. echo "..." . mb_substr($coolStory, $matches[$i] - 10, 60) . "... $message \n";
  49. }
  50. }
  51.  
  52. //var_dump($pattern);
  53. //var_dump($message);
  54. ?>
  55.  
Success #stdin #stdout 0.03s 52480KB
stdin
Standard input is empty
stdout
array(2) {
  [0]=>
  string(24) "Координально"
  [1]=>
  string(10) "сдесь"
}
Координально и - Ошибка в слове "кардинально".
...ьно сдесь.... - Ошибка в слове "кардинально". 
сдесь и - Не "сдесь", а "здесь".
...ьно сдесь.... - Не "сдесь", а "здесь".