[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не могу разобраться с регулярными выражениями!!
wolfandman
Привет всем!
Вроде не такой уж новичок в PHP, но PCRE - Это просто граната...

Текст такого вида:


Краткие характеристики:

{list}
Мощность ,, 100Вт
Энергозатраты ,,/ч
{/list}

Дополнительная ифнормация:

{list}
Производитель ,, ООО "Уралсиб"
Инструкция ,, нет
{/list}


Запятые нужны для последующего определения границы ячейки, но я даже ещё до этого не дошёл, т.к. не могу понять что делать с {list}....{/list}

пишу так:

$text = preg_replace("/{list}(.+){\/list}/s", "$1", $text);


Но код работает неверно! Результат такой:

Краткие характеристики: Мощность ,, 100Вт Энергозатраты ,, 1л/ч {/list} Дополнительная ифнормация: {list} Производитель ,, ООО "Уралсиб" Инструкция ,, нет.

То есть видны {/list}{list}.

blink.gif

Прошу вас! Подскажите!
Спасибо!




Спустя 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.

Спустя 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 написал(а):
Такс.. никак.. что-то как-то неполноценно работают функции, вызванные через обработчик регулярных выражений..

$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();

Раньше такую функцию не знал.

Ей можно передавать свою функцию для обработки.


_____________
Лучше быть, чем казаться
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.