За последние 24 часа нас посетили 17560 программистов и 1314 роботов. Сейчас ищут 1439 программистов ...

Функция set_block шаблонизатор

Тема в разделе "Регулярные выражения", создана пользователем Elect, 6 сен 2015.

  1. Elect

    Elect Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    70
    Симпатии:
    0
    В общем у меня есть маркер типа {block}123{/block}
    И эта функция бы всё нормально делала,если бы находила его)))
    Код (PHP):
    1. public function set_block($name,$value){
    2.         preg_match_all("/{$name}([^{}]+){/$name}/i",$this->content,$b);
    3.         var_dump($b);
    4.         if(count($b[0]) > 0){
    5.             for($i=0;$i < count($b[0]);$i++){
    6.                 $this->content = str_replace("{".$name."}","",$this->content);
    7.                 $this->content = str_replace("{\/$name}","",$this->content);
    8.                 if(empty($value)){
    9.                     $this->content = str_replace($b[1][$i],"",$this->content);
    10.                 }else{
    11.                     
    12.                 }
    13.             }
    14.         }
    15.         return $this->content;
    16.     }
    17.  
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    давай для начала ты объяснишь словами алгоритм своего метода
     
  3. Elect

    Elect Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    70
    Симпатии:
    0
    Хорошо,
    Сначало он получает имя блока и значение
    Дальше он находит по регулярке это в нужном контенте
    Если он нашёл больше 0 "блоков" он в цикле заменяет им "маркеры с полученным именем" на пустоту
    Если полученное значение пустое,тогда и содержимое между "маркерами" он заменяет на пустоту
    И возвращает
    Здесь он не может найти по регулярке нужный блок

    Добавлено спустя 5 минут 27 секунд:
    Мне нужно только составить регулярку для {block} content {/block}

    Добавлено спустя 16 минут 31 секунду:
    Это исправил,но теперь $b[1][$i] выходит }123,он от куда-то это скобку берёт.
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    "/{$name}([^{}]+){/$name}/i" - вот тут логику объясни