Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Превратить $conf[site] => $this->content[conf][site]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Roler
Отправлено: 08 Ноября, 2010 - 10:08:14
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




Никак не получается написать регулярки для следующих преобразований:

CODE (text):
скопировать код в буфер обмена
  1. {$images["progress_bar"]}

в
CODE (text):
скопировать код в буфер обмена
  1. $this->content["images"]["progress_bar"]


и в тоже время

в



Пробую так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $this->file = preg_replace('#\{\$([^\[])(.*)\}#U','<?=$this->content["\1"]\2?>',$this->file);
  3.  



Однако, получается совсем не так, как хотелось бы:
CODE (text):
скопировать код в буфер обмена
  1. <?=$this->content["h"]ead?>



И да, конечно, желательны было бы обеспечить возможность бесконечной вложенности.
Уже столько голову ломаю... Улыбка
 
 Top
vitaliy_mad
Отправлено: 08 Ноября, 2010 - 13:04:06
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. echo preg_replace('/\$([^\[]+)\["(.+)"\]/U','$this->content["$1"]["$2"]','{$images["progress_bar"]}');
 
 Top
Roler
Отправлено: 08 Ноября, 2010 - 15:02:39
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




Спасибо, {$images['info']} он обрабатывает прекрасно, даже если там многомерный массив(я, правда, не до конца понимаю - как? Улыбка ), а вот просто {$image} никак.
Вторую регулярку для повторного обхода писать не хочется.
Может как-нибудь совместить?

(Отредактировано автором: 08 Ноября, 2010 - 15:03:13)

 
 Top
vitaliy_mad
Отправлено: 08 Ноября, 2010 - 15:08:16
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




думаю лучше второй проход делать...
 
 Top
Roler
Отправлено: 08 Ноября, 2010 - 16:11:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




Просто с точки зрения логики выглядит то не сложно.

{$images["progress_bar"]}

Берём всё в {} до первой [ и преобразовываем, всё что дальше - переносим не трогая.
 
 Top
vitaliy_mad
Отправлено: 08 Ноября, 2010 - 17:25:23
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




а если первая [ аж в следующей конструкции?
 
 Top
Roler
Отправлено: 08 Ноября, 2010 - 19:19:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




Ну я поэтому и изображал нечто вроде {(всё, кроме [)(всё, что осталось)}
 
 Top
Roler
Отправлено: 09 Ноября, 2010 - 11:57:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




ОМГ, как-то странно оно работает.

PHP:
скопировать код в буфер обмена
  1. <?
  2. $text = '{$images} <br>  {$newage} <br> {$array["image"]}';
  3. echo preg_replace('/\$([^\[]+)\["(.+)"\]/U','$this->content["$1"]["$2"]',$text);
  4. ?>


CODE (htmlphp):
скопировать код в буфер обмена
  1. {$this->content["images}
  2. {$newage}
  3. {$array"]["image"]}
 
 Top
JustUserR
Отправлено: 09 Ноября, 2010 - 12:47:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Roler пишет:
{$images['info']} он обрабатывает прекрасно, даже если там многомерный массив(я, правда, не до конца понимаю - как?
Использование аргументов индексных и ассоциативных массивов для встроенных строковых функций и обрабочиков шаблонов регулярных выражений - обеспечивает в общем случае применение некоторого обобщеного значение которое зависит от целевой функции В частности в зависимости от используемого контекста компоненты массива могут использоваться как для последовательской обработки - так и проведения интерполяции значений


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Roler
Отправлено: 09 Ноября, 2010 - 15:28:47
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




Решено так:

CODE (htmlphp):
скопировать код в буфер обмена
  1. $this->file = preg_replace('#\{\$([a-z0-9_\-]+)([^\}]*)\}#s','<?=$this->content["\\1"]\\2?>',$this->file);

(Отредактировано автором: 09 Ноября, 2010 - 15:44:44)

 
 Top
JustUserR
Отправлено: 09 Ноября, 2010 - 21:44:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Roler Возможно для применения созданного вами регулярного выражения в общем случае для разветвленной структуры анализируемого документа - целесообразно использования нежадный вариант квантификаторов для предотвращения трактования блока схожих по синтаксису элементов в единое целое


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Roler
Отправлено: 09 Ноября, 2010 - 23:06:50
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




JustUserR
Я обычно инвертирую жадность, но тут без неё получается прекрасно.

P.S. Раньше таких усложнённых конструкций у вас не замечал. Тонкий троллинг или что? Улыбка

(Отредактировано автором: 09 Ноября, 2010 - 23:08:19)

 
 Top
JustUserR
Отправлено: 11 Ноября, 2010 - 09:46:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Roler пишет:
JustUserR Я обычно инвертирую жадность, но тут без неё получается прекрасно.
В действительности возможно приведенное вами регулярое выражение может обеспечивать требуемую замену в общем без инвертирования жадности квантификаторов - одако в таком случае источником неправильной замены может являться наличие шаблона правила замены в виде вхождения ключа искомного ассоциативного массива Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB