<?php

error_reporting(0);
mb_internal_encoding('utf-8');

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

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

function makeYodaStyleText($text) {
    
    $result = '';

    $regInt = '/[,;:]?\\s/'; # Разделяет слова
    $regExt = '/[.!?]/'; # Разделяет предложения

	$signsExt = array();
	$signExt = 0;

    if (preg_match_all($regExt, $text, $signsExt)) {
		$lines = preg_split($regExt, $text, -1, PREG_SPLIT_NO_EMPTY);
	} else exit();

	foreach ($lines as $key => $line) {
		$signsInt = array();
		$line = mb_strtolower(trim($line));

		if (preg_match_all($regInt, $line, $signsInt)) {
			$words = preg_split($regInt, $line);
		}

		$words_rev = array_reverse($words);
		$signsInt_rev = array_reverse($signsInt[0]);
		$signInt = 0;

		$line_rev = '';

		foreach ($words_rev as $key => $word) {
  			$line_rev .= $word . $signsInt_rev[$signInt];
  			$signInt++;
  		}
  	$line_rev = makeFirstletterUppercase($line_rev);
  	$result .= $line_rev . $signsExt[0][$signExt] . ' ';
  	$signExt++;
  }
  return $result;
}

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