fork download
  1. <?php
  2. setlocale(LC_ALL, 'ru_RU');
  3.  
  4. function copyCase($neededLetter, $symbol){
  5. //if (ctype_upper($symbol)){ //почему-то не работает
  6. if (preg_match('/[А-ЯЁ]/u', $symbol)){
  7. return mb_strtoupper($neededLetter);
  8. }
  9. return $neededLetter;
  10. }
  11.  
  12. $text = "ЗДЕЛАЛ СДЕСЬ КООРДИНАЛЬНО Привет,Жырный!труд:Шырокий?пассаЖЫР;зделаю Координально но, например СДЕСЬ сдесь решена проблема ушыбов.
  13. ЗДЕЛАНО многое а? ведь эти ушы зделали мы. Один ананас но зато как ЗДЕЛАННЫЙ";
  14.  
  15. $simpleReplace = ['/(к)оординально/ui' => '$1ардинально', //кардинально
  16. '/([,;!?:])([^,;!?:\\s]+)/u' => '$1 $2', //пробелы после знаков препинани¤
  17. '/([а-яЁ]+)\\s+((?:а|но)\\b)/ui' => '$1, $2']; //знаки препинания
  18.  
  19. foreach ($simpleReplace as $pattern => $replacement){
  20. $text = preg_replace($pattern, $replacement, $text);
  21. }
  22. //здесь
  23. $text = preg_replace_callback('/(с)(десь)/ui',
  24. function($matches){
  25. $letter = copyCase('з', $matches[1]);
  26. $word = "{$letter}{$matches[2]}";
  27. return $word;
  28. }, $text);
  29. //зделал
  30. $text = preg_replace_callback('/(з)(дела)((?:ю|л|н)\\s*)/ui',
  31. function($matches){
  32. $letter = copyCase('с', $matches[1]);
  33. $word = "{$letter}{$matches[2]}{$matches[3]}";
  34. return $word;
  35. }, $text);
  36. //жы-шы
  37. $text = preg_replace_callback('/([а-яё]*(?:ж|ш))(ы)([а-яё]*)/ui',
  38. function($matches){
  39. $letter = copyCase('и', $matches[2]);
  40. $word = "{$matches[1]}{$letter}{$matches[3]}";
  41. return $word;
  42. }, $text);
  43. echo $text;
  44. ?>
Success #stdin #stdout 0.03s 52432KB
stdin
Standard input is empty
stdout
СДЕЛАЛ ЗДЕСЬ Кардинально Привет, Жирный! труд: Широкий? пассаЖИР; сделаю Кардинально, но, например ЗДЕСЬ здесь решена проблема ушибов.
		СДЕЛАНО многое, а? ведь эти уши сделали мы. Один ананас, но зато как СДЕЛАННЫЙ