Регулярка для извлечения текста с html страниц - без нарушения структуры smarty

Тема в разделе "Регулярные выражения", создана пользователем Black#FFFFFF, 14 апр 2008.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Black#FFFFFF

    Black#FFFFFF

    Регистр.:
    19 июл 2007
    Сообщения:
    176
    Симпатии:
    103
    Народ. Нужна регулярочка - которая "достает" со страницы только текст между тэгами, ту часть его, которая не заключена в {} скобки.
    Пример:
    Код:
    <div>I need some text {if $here == true}{$here}{/if} bellow {$unique}</div>
    
    Так вот достать нужно отдельно
    Код:
    1.I need some text
    2. bellow
    
    Не задев конструкции смарти.
    и не трогая html теги.
    Получив на выходе "массив" текста в текущем теге страницы, и, в частности, разбитый по значениям - если там есть смарти конструкция внутри.

    Суть вопроса - "приехали" неаккуратно сделанные шаблоны к сайту на smarty. Шаблонов много. Суть "неаккуратности" - встречается не вынесенный в конф файлы текст - а на сайте подразумевалась мультиязычность. Вот теперь бы и "выдрать" текст со страниц между тэгами - не задев структуру смарти. А потом "загнать" его обратно - но уже в виде констант с названием цельных строк.

    Вот регулярочка "на доставание" текста и пригодилась бы.
    Остальное сделаю сам.

    На первый взгляд что-то похожее:
    PHP:
    preg_match_all("'((<[\/\!]*?[^<>]*?>)|(\{[^\{\}]*?\})!?[\s]*)*?([^<>\{\}]*?)+(!?[\s]*(<[^<>]*?>)|((\{[^\{\}]*?\})))*?'Uis",$res,$matches,PREG_PATTERN_ORDER);
    но ищу более "удобные" варианты. + еще очень бы не хотелось забирать то - что между <script></script> помещается.
     
  2. Karlasan

    Karlasan Постоялец

    Регистр.:
    7 дек 2007
    Сообщения:
    134
    Симпатии:
    214
    вот например:

    PHP:
    <?

    $s='<div>I need some text {if $here == true}{$here}{/if} bellow {$unique}</div>';
    $s=strip_tags($s);
    $s=preg_split("/(\{[^\}]*\})/",$s,-1,PREG_SPLIT_NO_EMPTY);
    print_r($s);

    ?>
    вернет:

    что и заказывалось :)

    про
    попозже подумаю. есть там коекакие заморочки
     
    xVoLAnD, zverOK и Black#FFFFFF нравится это.
  3. serg_g

    serg_g Создатель

    Регистр.:
    31 окт 2008
    Сообщения:
    35
    Симпатии:
    9
    удаляем все скрипты
    PHP:
    $text=preg_replace('/<script>.+?<\/script>/is','',$html);
    а потом, как сказал Karlasan.....
     
Статус темы:
Закрыта.