<?php
/*Yoda Speak
Задание:
дан текст из нескольких предложений, предложение состоит из русских слов, разделенных пробелами. Написать программу, переставляющую слова в предложениях в обратном порядке. Знаки препинания в конце предложений (точка, восклицательный знак) можно не сохранять.*/

//$text = "Кажется, нас обнаружили! Надо срочно уходить отсюда, пока не поздно. Бежим же скорее!";
// Другие варианты для тестов
//$text = "Ну, прости меня! Не хотела я тебе зла сделать; да в себе не вольна была. Что говорила, что делала, себя не помнила.";
$text = "Идет гражданская война?? Космические корабли повстанцев, наносящие удар с тайной базы, одержали первую победу, в схватке со зловещей Галактической Империей!";

/* Делает первую букву предложения заглавной */
function makeFirstletterUppercase($text) {
    return mb_strtoupper(mb_substr($text, 0, 1)) . mb_substr($text, 1);
}

function makeYodaStyleText($text) {
    $regExp = [
        "expSplit" => "/([.!?;]+)\K\s*/",
        "expUselessSymbol" => "/[:,-]/",
        "expReplace" => "/([^.!?;]+)([.!?;]+)(.+)/",
        "replacement" => "$1$3$2"
    ];
    $text = mb_strtolower(preg_replace($regExp["expUselessSymbol"], "", $text));
    $strings = preg_split($regExp["expSplit"], $text, -1, PREG_SPLIT_NO_EMPTY);
    $reverseStrings = [];

    foreach ($strings as $string) {
        $reverseWords = array_reverse(explode(" ", $string));
        $reverseStrings[] = makeFirstLetterUppercase(implode(" ", $reverseWords));
    }

    return implode(" ", preg_replace($regExp["expReplace"], $regExp["replacement"], $reverseStrings));
}

$yodaText = makeYodaStyleText($text);
echo "Йода говорит: {$yodaText}\n";