![]() |
|
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]()
|
|
| Гость_Frikazoid |
|
||||||
|
Unregistered |
Доброго времени суток!
Стоит задача состоит в том чтобы правильно отпарсить условные операторы с вложенностью! Есть вот такое!
На выходе должен получить
а получаю
Если переписать внутреннюю часть регекспа как (.*(({if .*}.*{endif})*).*) то он сразу начнёт страдать жадностью.... Заранее спасибо за помощь! |
||||||
|
|||||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 16 Всего: 261 |
Тут дело не только в регулярках. Помимо того, чтобы просто достать условия и т.п., надо их еще выполнять... Так что тут одними рэгами не обойдешься.
|
|||
|
||||
| Гость_Frikazoid |
|
|||
|
Unregistered |
Mal Hack: =)
Я свой шаблонизатор пишу! =) Дискусию по поводу нужности не стоит разводить! мне со своим работать удобнее! =) Написал уже 5 сайтов на своём ДЕТИЩЕ! =) Раньше писал конструкции вида {if error}error{endif error}! И проблем вообще не наблюдалось! =) Но хочется сделать шаг в сторону нормального парсинга! Мне собственно регексп интересует! С остальной логикой я разберусь.... |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 16 Всего: 261 |
Ты меня не так понял. Я имел ввиду, что достав if надо их проверить, т.е. выполнить сами условия. А это уже не регулярками делать а callback функцией
|
|||
|
||||
| Гость_Frikazoid |
|
|||
|
Unregistered |
Mal Hack
Ёкарный бабай! =) У меня шаблонизатор работает не на пост обработке! =) Т.е. я ему пихаю конструкцию вида $skin->setif('error', true); в этой ф-и....
Словом мне только дай тот регексп! =) Буду многоблагодарен! =) На самом деле у меня поддерживается не только булеан условия.... Есть и то про что ты говоришь! =) но мне надо для начала на булеанах откатать! |
|||
|
||||
| Frikazoid |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 29.3.2002 Репутация: нет Всего: 2 |
Самое интересное что шаблонизатор весь работает на регулярках я в них слабо разбираюсь! =\
-------------------- RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле! А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое. |
|||
|
||||
| Frikazoid |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 29.3.2002 Репутация: нет Всего: 2 |
Ндя. Чую этот вопрос затянется....
-------------------- RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле! А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое. |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 16 Всего: 261 |
Frikazoid еще раз поясни что тебе нужно. Просто я понял это так, что тебе надо достать все ифы и т.п. и их проверить и заменить на то, на что нужно. Или я не прав?
|
|||
|
||||
| Frikazoid |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 29.3.2002 Репутация: нет Всего: 2 |
Mal Hack нет! мне надо правильно удалять тэги!
К примеру {if error}error {if sqlerror}sql{endif} on page {endif} так вот! мне надо просто удалить {if error} {endif} чтобы остался только {if sqlerror}sql{endif} надеюсь понятно расписал? я никогда не отличался хорошим объяснением! не быть мне учителем! =) -------------------- RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле! А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое. |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 16 Всего: 261 |
Так, уже лучше.
Теперь скажи. error всегда? И всегда надо оставить только один вложенный if? |
|||
|
||||
| Frikazoid |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 29.3.2002 Репутация: нет Всего: 2 |
Mal Hack Я же привел только пример! =)
тестовый скрипт! =) вложенных тэгов внутри может быть много.... а может и не быть вообще.... а может быть и мультивложенность! в том то и прикол... Добавлено @ 00:17
просто пример привёл... -------------------- RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле! А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое. |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 16 Всего: 261 |
Попробуй так:
|
|||
|
||||
| Frikazoid |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 29.3.2002 Репутация: нет Всего: 2 |
Эмс....
допустим на этой строке {if test}(test string first){endif} ggg hhh {if test2}test2{endif} работать не будет! и на этой.... {if test}(test string {if subtest}subtest {if tt}tt{endif} string{endif} first){endif} ggg hhh {if test2}test2{endif} вот этот регексп str = preg_replace( "#(\{if test\}(.*?\{if.+?\}.*?\{endif\}.+?)+\{endif\})#is" , "\\2" , $str ); работает правильно для {if test}(test string {if subtest}subtest string{endif} first){endif} ggg hhh {if test2}test2{endif} но для {if test}(test string {if subtest}subtest {if tt}tt{endif} string{endif} first){endif} ggg hhh {if test2}test2{endif} работать не будет. ндя. чую это регулярками не сделать... либо делать c preg_match_all ..... Добавлено @ 14:27 Печально..... тут вобщем проблема в том что надо замутить парное соответствие внутренних условий! т.е. {if param} что угодно тут и как можно ближе {endif} -------------------- RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле! А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое. |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 16 Всего: 261 |
Посмотри, как это в Смарти реализованно. Там вроде есть что-то подобное.
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Тексты | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |