<?php
// Работает:
//$text = "ny , chto... ne smotrel eshe black mesa..ya sob.";
//$text = "roses are red,and violets are blue.whatever you do i'll keep it for you.";
// Не работает:
//$text = 'привет.есть 2 функции,preg_split и explode ,не понимаю,в чем между ними разница.';
//$text = "ну , что... не смотрел еще black mesa.я собирался скачать ,но все как-то некогда было.";
function makeFirstLetterUppercase($text) {
// После этой операции если кириллица, то у $text[0] слетает кодировка.
}
function fixText($text) {
$fixedSentences = [];
// Разбивка текста на предложения. Обрезает до первого знания препинания, не включая ','.
// Если знаков несколько - остальные летят в массив следом, отдельно.
$sentences = preg_split('/(?<=[!.?])/ui', $text, -1, PREG_SPLIT_NO_EMPTY
);
foreach ($sentences as $sentence) {
// Фикс знаков '.!?'. Склейка с предыдущим. предложением.
if (in_array($sentence, ['.', '!', '?'])) { $sentence = array_pop($fixedSentences) . $sentence; }
// Фикс запятой, верхний регистр первой буквы в предложении.
$sentence = makeFirstLetterUppercase
(implode(', ', $sentenceParts));
$fixedSentences[] = $sentence;
}
return implode(' ', $fixedSentences); }
$result = fixText($text);
echo "{$result}\n";
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7Cm1iX2ludGVybmFsX2VuY29kaW5nKCd1dGYtOCcpOwoKLy8g0KDQsNCx0L7RgtCw0LXRgjoKLy8kdGV4dCA9ICJueSAsIGNodG8uLi4gICAgbmUgc21vdHJlbCBlc2hlIGJsYWNrIG1lc2EuLnlhIHNvYi4iOwovLyR0ZXh0ID0gInJvc2VzIGFyZSByZWQsYW5kIHZpb2xldHMgYXJlIGJsdWUud2hhdGV2ZXIgeW91IGRvIGknbGwga2VlcCBpdCBmb3IgeW91LiI7CgovLyDQndC1INGA0LDQsdC+0YLQsNC10YI6Ci8vJHRleHQgPSAn0L/RgNC40LLQtdGCLtC10YHRgtGMIDIg0YTRg9C90LrRhtC40LgscHJlZ19zcGxpdCDQuCBleHBsb2RlICzQvdC1INC/0L7QvdC40LzQsNGOLNCyINGH0LXQvCDQvNC10LbQtNGDINC90LjQvNC4INGA0LDQt9C90LjRhtCwLic7Ci8vJHRleHQgPSAi0L3RgyAgLCDRh9GC0L4uLi4gICAgICDQvdC1INGB0LzQvtGC0YDQtdC7INC10YnQtSBibGFjayBtZXNhLtGPINGB0L7QsdC40YDQsNC70YHRjyDRgdC60LDRh9Cw0YLRjCAgLNC90L4g0LLRgdC1INC60LDQui3RgtC+INC90LXQutC+0LPQtNCwINCx0YvQu9C+LiI7CgoKZnVuY3Rpb24gbWFrZUZpcnN0TGV0dGVyVXBwZXJjYXNlKCR0ZXh0KSB7CgkvLyDQn9C+0YHQu9C1INGN0YLQvtC5INC+0L/QtdGA0LDRhtC40Lgg0LXRgdC70Lgg0LrQuNGA0LjQu9C70LjRhtCwLCDRgtC+INGDICR0ZXh0WzBdINGB0LvQtdGC0LDQtdGCINC60L7QtNC40YDQvtCy0LrQsC4KICAgIHJldHVybiBtYl9zdHJ0b3VwcGVyKCR0ZXh0WzBdKSAuIG1iX3N1YnN0cigkdGV4dCwgMSk7Cn0KCmZ1bmN0aW9uIGZpeFRleHQoJHRleHQpIHsKCiAgICAkZml4ZWRTZW50ZW5jZXMgPSBbXTsKICAgIC8vINCg0LDQt9Cx0LjQstC60LAg0YLQtdC60YHRgtCwINC90LAg0L/RgNC10LTQu9C+0LbQtdC90LjRjy4g0J7QsdGA0LXQt9Cw0LXRgiDQtNC+INC/0LXRgNCy0L7Qs9C+INC30L3QsNC90LjRjyDQv9GA0LXQv9C40L3QsNC90LjRjywg0L3QtSDQstC60LvRjtGH0LDRjyAnLCcuCiAgICAvLyDQldGB0LvQuCDQt9C90LDQutC+0LIg0L3QtdGB0LrQvtC70YzQutC+IC0g0L7RgdGC0LDQu9GM0L3Ri9C1INC70LXRgtGP0YIg0LIg0LzQsNGB0YHQuNCyINGB0LvQtdC00L7QvCwg0L7RgtC00LXQu9GM0L3Qvi4KICAgICRzZW50ZW5jZXMgPSBwcmVnX3NwbGl0KCcvKD88PVshLj9dKS91aScsICR0ZXh0LCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSk7CiAgICAKICAgIGZvcmVhY2ggKCRzZW50ZW5jZXMgYXMgJHNlbnRlbmNlKSB7CiAgICAgICAgLy8g0KTQuNC60YEg0LfQvdCw0LrQvtCyICcuIT8nLiDQodC60LvQtdC50LrQsCDRgSDQv9GA0LXQtNGL0LTRg9GJ0LjQvC4g0L/RgNC10LTQu9C+0LbQtdC90LjQtdC8LgogICAgICAgIGlmIChpbl9hcnJheSgkc2VudGVuY2UsIFsnLicsICchJywgJz8nXSkpIHsKICAgICAgICAgICAgJHNlbnRlbmNlID0gYXJyYXlfcG9wKCRmaXhlZFNlbnRlbmNlcykgLiAkc2VudGVuY2U7CiAgICAgICAgfQogICAgICAgIC8vINCk0LjQutGBINC30LDQv9GP0YLQvtC5LCDQstC10YDRhdC90LjQuSDRgNC10LPQuNGB0YLRgCDQv9C10YDQstC+0Lkg0LHRg9C60LLRiyDQsiDQv9GA0LXQtNC70L7QttC10L3QuNC4LgogICAgICAgICRzZW50ZW5jZVBhcnRzID0gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnLCcsICRzZW50ZW5jZSkpOwogICAgICAgICRzZW50ZW5jZSA9IG1ha2VGaXJzdExldHRlclVwcGVyY2FzZShpbXBsb2RlKCcsICcsICRzZW50ZW5jZVBhcnRzKSk7CiAgICAgICAgCiAgICAgICAgJGZpeGVkU2VudGVuY2VzW10gPSAkc2VudGVuY2U7CiAgICB9CiAgICAKICAgIHJldHVybiBpbXBsb2RlKCcgJywgJGZpeGVkU2VudGVuY2VzKTsKfQoKJHJlc3VsdCA9IGZpeFRleHQoJHRleHQpOwplY2hvICJ7JHJlc3VsdH1cbiI7