@Netscout

Как удалить содержимое фигурных скобок на php?

Здравствуйте !
Подскажите пожалуйста - как удалить содержимое фигурных скобок на php вместе со скобками.

Например есть переменная
$str='текст_полезный{{текст_текст{{текст_внутри скобки}}дальше_текст}}_снова полезный текст';

Нужно на выходе получить: текст_полезный_снова полезный текст

То есть удалить с учётом вложенных тегов.

Написал функцию, но логика её оказалась неверной.

function del_figurn ($stroka)

{
	
    $p1=strpos($stroka, '{{');
	$p2=strpos($stroka, '}}');
	
	// строка {{ ... }}   без кавычек
	$podstroka = substr($stroka, $p1+2, $p2-$p1);
	
	
	//echo ($podstroka.'<br><br>');

	
	if (strpos($podstroka, '{{')!==false){
		$pppos=strpos($podstroka, '{{')+1;
			$vnutr=substr($podstroka, $pppos-1, $p2-$p1);
	
	
	$stroka=str_replace ($vnutr, '', $stroka);
									  
									     } else $stroka=substr_replace($stroka,'', $p1, ($p2-$p1)+2);


									  //echo($stroka);
	
	return($stroka);
	
}


На случай если попадётся такой код: $str='текст_полезный{{текст_текст{{текст_внутри скобки}}дальше_текст}}_снова полезный текст{{текст}}дальше текст';

оно удалит "_снова полезный текст"

А нужно, чтобы просто удалил блоки {{...}}

Спасибо за подсказки!
  • Вопрос задан
  • 2323 просмотра
Решения вопроса 2
NeiroNx
@NeiroNx
Программист
$str = "текст_полезный{{текст_текст{{текст_внутри скобки}}дальше_текст}}_снова полезный текст"; 
$str = preg_replace("/\\{.+\\}/m","",$str);
Ответ написан
Комментировать
@Netscout Автор вопроса
Сделал так:

<?php




function funct($stroka) {

    $p1=strpos($stroka, '{{');
	$p2=strpos($stroka, '}}');
	
	// строка {{ ... }}   без кавычек
	$podstroka = substr($stroka, $p1+2, $p2-$p1);
	
	
	//echo ($podstroka.'<br><br>');

	
	if (strpos($podstroka, '{{')!==false){
		$pppos=strpos($podstroka, '{{')+1;
			$vnutr=substr($podstroka, $pppos-1, $p2-$p1);
	
	
	$stroka=str_replace ($vnutr, '', $stroka);
									  
									     } else $stroka=substr_replace($stroka,'', $p1, ($p2-$p1)+2);


									  //echo($stroka);
	
	return($stroka);
	
}	
	
	

$stroka="текст_полезный{{текст_текст{{текст_внутри скобки}}дальше_текст}}_снова_полезный_текст{{и тут опять текст}}_опять_текст";

					for ($p=0; $p<=5000; $p++) {
				
					if(strpos($stroka, '{{')!==false) {
					$stroka=funct($stroka);		      } else break; 
				
				
							 			       }

echo $stroka;											   
											   
	
?>


Всем спасибо за помощь, но решил по своему. Костыли конечно ))) Особенно имитация рекурсии (в цикле), но главное работает ))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Регулярные выражения и функция preg_replace() придут вам на помощь.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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