Вроде не такой уж новичок в PHP, но PCRE - Это просто граната...
Текст такого вида:
Краткие характеристики:
{list}
Мощность ,, 100Вт
Энергозатраты ,, 1л/ч
{/list}
Дополнительная ифнормация:
{list}
Производитель ,, ООО "Уралсиб"
Инструкция ,, нет
{/list}
Запятые нужны для последующего определения границы ячейки, но я даже ещё до этого не дошёл, т.к. не могу понять что делать с {list}....{/list}
пишу так:
$text = preg_replace("/{list}(.+){\/list}/s", "$1", $text);
Но код работает неверно! Результат такой:
Краткие характеристики: Мощность ,, 100Вт Энергозатраты ,, 1л/ч {/list} Дополнительная ифнормация: {list} Производитель ,, ООО "Уралсиб" Инструкция ,, нет.
То есть видны {/list}{list}.
Прошу вас! Подскажите!
Спасибо!
Спустя 41 минута, 12 секунд (23.02.2010 - 00:07) Oyeme написал(а):
Ничего не понял.
Как надо то?
Сделай пример,что и как должно быть.
Как надо то?
Сделай пример,что и как должно быть.
Спустя 11 минут, 33 секунды (23.02.2010 - 00:18) twin написал(а):
а зачем шаблон (предположительно СМАРТИ) бомбить регулярками?
Спустя 9 часов, 9 минут, 14 секунд (23.02.2010 - 09:28) qpayct написал(а):
наверно ты просто начало и конец не поставил ^ $
Спустя 2 часа, 7 минут, 20 секунд (23.02.2010 - 11:35) baston написал(а):
Цитата (wolfandman @ 22.02.2010 - 23:26) |
То есть видны {/list}{list}. |
Попробуйте так:
echo preg_replace("#\{list\}|\{\/list\}#", "", $str);
Спустя 7 часов, 2 минуты, 36 секунд (23.02.2010 - 18:38) Beowulf написал(а):
$text = preg_replace("/{list}(.+?){\/list}/s", "$1", $text);
Вот то что вам нужно. Почитайте про Lazy quantification.
Вот то что вам нужно. Почитайте про Lazy quantification.
Спустя 36 минут, 3 секунды (23.02.2010 - 19:14) wolfandman написал(а):
Цитата (Beowulf @ 23.02.2010 - 19:38) |
$text = preg_replace("/{list}(.+?){\/list}/s", "$1", $text); |
Есть! Работает! ) Спасибо пребольшое!!!
Я так понял только знака вопроса не хватало у меня )
Отвечаю на вопросы:
Это не смарти. Я немного подтачиваю Joomla-VirtueMart под себя. Мне хотелось бы чтобы в кратком описании товара при введении {list}...{/list} был виден список. Ну чтобы не писать каждый раз <ul><li> и т.п..
Теперь попробую сделать обработчик этого $1.
Представляю себе так:
$text = preg_replace("/{list}(.+?){\/list}/s", make_list("$1"), $text);
, где make_list и сделает мне список.
Буду делать.
Ещё раз спасибо, Beowulf!
Спустя 1 час, 20 минут, 11 секунд (23.02.2010 - 20:34) wolfandman написал(а):
Такс.. никак.. что-то как-то неполноценно работают функции, вызванные через обработчик регулярных выражений..
В функцию make_list уходит такой текст:
Мощность ,, 100Вт
Энергозатраты ,, 1л/ч
Он по идее должен преобразовываться в такой вид:
То есть функция make_list("$1") с помощью функции explode(",,", $text) должна превратить текст в массив для последующей обработки. Но explode(",,", $text) не работает. Как буд-то нет никаких ",," в тексте...
Но если запускать make_list() вне preg_replace, то всё работает и имеет лучший вид.
Я думаю, что пропущенный через preg_replace() текст преобразуется в какой-то другой формат, который встроенные функции не воспринимают.
Что вы думаете? Прошу мне помочь!
$text = preg_replace("/{list}(.+?){\/list}/s", make_list("$1"), $text);
В функцию make_list уходит такой текст:
Мощность ,, 100Вт
Энергозатраты ,, 1л/ч
Он по идее должен преобразовываться в такой вид:
<table>
<tr><td>Мощность</td> <td>100Вт</td></tr>
<tr><td>Энергозатраты</td> <td>1л/ч </td></tr>
</table>
То есть функция make_list("$1") с помощью функции explode(",,", $text) должна превратить текст в массив для последующей обработки. Но explode(",,", $text) не работает. Как буд-то нет никаких ",," в тексте...
Но если запускать make_list() вне preg_replace, то всё работает и имеет лучший вид.
Я думаю, что пропущенный через preg_replace() текст преобразуется в какой-то другой формат, который встроенные функции не воспринимают.
Что вы думаете? Прошу мне помочь!
Спустя 14 часов, 36 минут, 51 секунда (24.02.2010 - 11:11) wolfandman написал(а):
Нашёл решение!
Функция preg_replace_callback();
Раньше такую функцию не знал.
Ей можно передавать свою функцию для обработки.
Функция preg_replace_callback();
Раньше такую функцию не знал.
Ей можно передавать свою функцию для обработки.
_____________
Лучше быть, чем казаться