Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Выбрать все {{var name}}


Автор: bel_nikita 14.11.2010, 02:20
Есть такой вот файл:
Код

    <PRODUCT>{{var name}}</PRODUCT>
    <DESCRIPTION>{{var description}}</DESCRIPTION>
    <URL>{{var url}}</URL>
    <IMGURL>{{var image}}</IMGURL>
    <PRICE>{{var price}}</PRICE>


Нужно достать все var'ы, потом заменить... с заменой вроде как понятно, а вот с регуляркой застрял.

Пытаюсь так:
Код
preg_match_all('{{var((?:.)*?)/us', $text, $matches) 


Но это нифига не правильно :-(

Автор: NLspieler 14.11.2010, 02:28
Вот так работает
Код

$text = '<PRODUCT>{{var name}}</PRODUCT>
    <DESCRIPTION>{{var description}}</DESCRIPTION>
    <URL>{{var url}}</URL>
    <IMGURL>{{var image}}</IMGURL>
    <PRICE>{{var price}}</PRICE>' ;
    
preg_match_all('|{{var (.+)}}|', $text, $matches) ;

print_r($matches);    

Автор: bel_nikita 14.11.2010, 13:42
Eще вопрос:
Код

$text = '
{{block type="product"}}
<PRODUCT>{{var name}}</PRODUCT>
<DESCRIPTION>{{var description}}</DESCRIPTION>
<URL>{{var url}}</URL>
<IMGURL>{{var image}}</IMGURL>
<PRICE>{{var price}}</PRICE>
{{/block}}
';
    
preg_match_all('|{{var (.+)}}|', $text, $matches) ;
print_r($matches[1]);
    
preg_match('|{{block type=(.*?)}}(.*?){{/block}}|is',  $text, $outs);
print_r($outs);

Нужно "выдернуть" блок, т.е. <PRODUCT>{{var name}}</PRODUCT> ... <PRICE>{{var price}}</PRICE>

Автор: NLspieler 14.11.2010, 15:00
Можно так сделать, за одно объеденив "достижения" прошлой регулярки
Код

preg_match_all('|<(.+)>({{var (.+)}})</.+>|U', $text, $outs) ;

Автор: bel_nikita 14.11.2010, 15:21
Нужно получить из блока фрагмент:
Код

<PRODUCT>{{var name}}</PRODUCT>
<DESCRIPTION>{{var description}}</DESCRIPTION>
<URL>{{var url}}</URL>
<IMGURL>{{var image}}</IMGURL>
<PRICE>{{var price}}</PRICE>

Потом сделаю replace всех {{var ...}} и будет готовый xml.

Код
$text = '
{{block type="product"}}
<PRODUCT>{{var name}}</PRODUCT>
<DESCRIPTION>{{var description}}</DESCRIPTION>
<URL>{{var url}}</URL>
<IMGURL>{{var image}}</IMGURL>
<PRICE>{{var price}}</PRICE>
{{/block}}
';
preg_match('#\{\{block\s+type="?(.*?)"?\s*\}\}\s*(.*?)\s*\{\{/block\}\}#is',  $text, $outs);
//preg_match_all('|<(.+)>({{var (.+)}})</.+>|U', $text, $outs) ;
echo '<PRE>';
print_r($outs);
echo '</PRE>';
Получаю все {{var ...}}, но нужно <PRODUCT>{{var name}}</PRODUCT> <DESCRIPTION>{{var description}}</DESCRIPTION> ...

Автор: NLspieler 14.11.2010, 16:10
Цитата(bel_nikita @  14.11.2010,  15:21 Найти цитируемый пост)
Получаю все {{var ...}}, но нужно <PRODUCT>{{var name}}</PRODUCT> <DESCRIPTION>{{var description}}</DESCRIPTION> ... 


Нет, ты получаешь именно <PRODUCT>{{var name}}</PRODUCT> <DESCRIPTION>{{var description}}</DESCRIPTION> ...,
просто браузер их воспринимает как теги, и поэтому не отображает. Смотри в браузере "исходный код"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)