Удалить тэги.

Frikazoid

Guest
Удалить тэги.

Доброго времени суток!
Собственно задача встала такая:
Есть текст вида
{if test}
(test string
{if subtest}
subtest string
{endif}
first)
{endif}
ggg hhh
{if test2}
test2
{endif}
надо составить регексп на удаление {if test} и {endif} тэга таким образом чтобы осталось

(test string
{if subtest}
subtest string
{endif}
first)
ggg hhh
{if test2}
test2
{endif}

но! внутри условного оператора может и не быть вложенного условия, а может и быть, а может быть и мультивложенность. Помогёте?
 

Frikazoid

Guest
Да... Давно использую свой движок....
раньше пользовал конструкции вида
{if param}....{endif param}
{else param}...{endelse param}

вот хочу чуток переделать чтоб было красивее!

-~{}~ 29.08.05 11:19:

Ну так что никто не поможет? =(
 

Andreika

"PHP for nubies" reader
как вариант для подумать ...

PHP:
<?php

$t = '{if test}
(test string
{if subtest}
subtest string
{endif}
first)
{endif}
ggg hhh
{if test2}
test2
{endif}';


preg_match('/(.*?)\{if test\}(.*)/ims',$t,$m);

$c = 0; // Счетчик if
$k = 0; // Счетчик цикла на всяк случай :)
$m[3]=$m[2];
$ms = '';  // Итог

while (true) {

  $k++;

  // ишем до, тэг и после него
  preg_match('/(.*?)({if[^\}]*}|{endif})(.*)/ims',$m[3],$m);

  // то, что до тега уже наше
  $ms.= $m[1];

  if ($m[2]=='{endif}') {


     $c--;
     if ($c<0) break; // Все вложенные if endif обработаны
  } else {

    $c++; // если {if ...} значит ждем на один больше {endif}
  }

  $ms.=$m[2]; // Записываем найденный тэг

  if ($k>100) break; // для теста

}

// Остаток строки
$ms.= $m[3];

echo "<font color=red>$ms</font>";
?>
 
Сверху