@rusgayfer

Как сделать правильную замену тегов в тексте?

Вот пример

$otwet = 'Привет [rand]текст1|текст2|текст3[/rand] другое продолжение';

while(strpos($otwet, "[rand]") !== false) {
	$pos1 = strpos($otwet, "[/rand]");
	$buf_mas = substr($otwet, 0, $pos1);
	$pos2 = StrCharPosBack($buf_mas, "[rand]");
	$buf_mas = substr($buf_mas, $pos2+6);
	$exploded_buf_mas = explode ("|", $buf_mas);
	$rnd = rand(0, count($exploded_buf_mas)-1);
	$otwet = substr_replace($otwet, $exploded_buf_mas[$rnd], $pos2, $pos1+7-$pos2);
  }

 // Функция ищет последнее вхождение символа
 function StrCharPosBack($haystack, $needle) {
	for ($i = strlen($haystack) ; $i>=0 ; $i--){
		if (substr($haystack, $i, 1) === $needle)
			return $i;
	}
	return false;
  }


На выходе получаем текст2 другое продолжение

Данный тег [rand]текст1|текст2|текст3[/rand] должен замениться случайным словом или предложением из тега, но он обрезает другие слова за тегом, как это исправить?
  • Вопрос задан
  • 35 просмотров
Решения вопроса 1
@IS-Builder
~ PHP-8 & REGEXP - This is a really powerful kit ~
Подобные задачи решают посредством регулярных выражений
spoiler
$str = 'Привет [rand]текст1|текст2|текст3[/rand] другое продолжение';

$str = preg_replace_callback(
    '~\[rand](.+?)\[/rand]~',
    function($m){
        $word = explode('|', $m[1]);
        shuffle($word);
        return $word[0];
    },
    $str
);

echo $str;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы