fork download
  1. <?php
  2.  
  3.  
  4. // Работает:
  5. //$text = "ny , chto... ne smotrel eshe black mesa..ya sob.";
  6. //$text = "roses are red,and violets are blue.whatever you do i'll keep it for you.";
  7.  
  8. // Не работает:
  9. //$text = 'привет.есть 2 функции,preg_split и explode ,не понимаю,в чем между ними разница.';
  10. //$text = "ну , что... не смотрел еще black mesa.я собирался скачать ,но все как-то некогда было.";
  11.  
  12.  
  13. function makeFirstLetterUppercase($text) {
  14. // После этой операции если кириллица, то у $text[0] слетает кодировка.
  15. return mb_strtoupper($text[0]) . mb_substr($text, 1);
  16. }
  17.  
  18. function fixText($text) {
  19.  
  20. $fixedSentences = [];
  21. // Разбивка текста на предложения. Обрезает до первого знания препинания, не включая ','.
  22. // Если знаков несколько - остальные летят в массив следом, отдельно.
  23. $sentences = preg_split('/(?<=[!.?])/ui', $text, -1, PREG_SPLIT_NO_EMPTY);
  24.  
  25. foreach ($sentences as $sentence) {
  26. // Фикс знаков '.!?'. Склейка с предыдущим. предложением.
  27. if (in_array($sentence, ['.', '!', '?'])) {
  28. $sentence = array_pop($fixedSentences) . $sentence;
  29. }
  30. // Фикс запятой, верхний регистр первой буквы в предложении.
  31. $sentenceParts = array_map('trim', explode(',', $sentence));
  32. $sentence = makeFirstLetterUppercase(implode(', ', $sentenceParts));
  33.  
  34. $fixedSentences[] = $sentence;
  35. }
  36.  
  37. return implode(' ', $fixedSentences);
  38. }
  39.  
  40. $result = fixText($text);
  41. echo "{$result}\n";
Success #stdin #stdout 0.02s 26404KB
stdin
Standard input is empty
stdout
Ny, chto... Ne smotrel eshe black mesa.. Ya sob.