Регулярный выражения

Иван 76

Новичок
Автор оригинала: N3K
Спасибо за глубокое описание )))) В данном случае мощьный шаблонизатор не нужен, т.к. шаблоны и элемены замены будут забиваться администратором а не пользователями.
п.с. проект как раз на зенде :)
Забиваться куда, в файл? почему тогда не использовать $view->render(...)?

>забиваться администратором а не пользователями.
Ну, если еще и пользователи начнут шаблоны забивать...

Возможно, упоминание о пользователях относится к моей фразе:
>Кроме того, возникает вопрос безопасности при многоступенчатой обработки шаблона строковыми функциями. Ведь пользователь может ввести в текстовое поле символы "{ARTIST}", и они могут быть обработаны.

Если это так, стоит в нее вдуматься, и правильно растолковать.
Пользователь может ввести в любую форму комбинацию символов, которая распознаётся шаблонизатором.
Например, он вводит {calendar}

При этом, если шаблон обрабатывается многоступенчато, например (такое нередко пишут)
foreach ($vars as $key=>$value) {
$tpl = str_replace('{'.$key.'}', $value, $tpl);
}

То существует вероятность, что комбинация {calendar}, которая содержится в переменной {text}, а не в шаблоне, будет так же обработана. Если {calendar} содержит незавершенную часть HTML-разметки, в браузер отдается страница с битой разметкой.
 

Maxsystems

Новичок
Тоесть:
PHP:
preg_replace_callback(
              "|(\d{2}/\d{2}/)(\d{4})|",
              array($zamena,'next_year'), // <- Так?
              $text);
Немного не совсем понял с класами, буду класс вызывать в функции, хотя наверное всетаки научусь выхывать как нужно, проблемма осталось с регулярным выражением:

Нужно извлечь 3 переменные из текста:
...
-|name|- Любой_текст -|/name|-
...

тоесть должно получиться следующее:
-|(name)|- (Любой_текст) -|/(name)|-

$masive[1] //name
$masive[2] //Любой_текст
$masive[3] //name
 

N3K

Новичок
Иван 76

Хранятся в базе данных.
Как можно исплоьзовать рендеринг в данном случае?
 

Иван 76

Новичок
Автор оригинала: N3K
Иван 76

Хранятся в базе данных.
Как можно исплоьзовать рендеринг в данном случае?
При желании можно.
В Zend_View_Abstract -> render($name) Метод _run(), который инклюдит файл, не описан. Он задается в Zend_View, который наследуется от Zend_View_Abstract.

Можно сделать обертку для обработки шаблонов из БД, например My_Zend_ViewDb и переопределить метод _run(), чтобы он исполнял код из базы.

Это первая мысль, которая возникла при беглом просмотре. Возможно, я что-то упустил.
В принципе, если админ задает всего две переменные, - то, возможно, и нет смысла возиться с этим. Тогда просто реплейсить.
 

N3K

Новичок
Думаю это того не стоит. Я перегрузил метод инициализации в моём контроллере, а остальные контроллеры его наследуют, и там всё это выполняю. С рендерингом можно было б сделать, если б надо было использовать большой шаблонизатор.
 

N3K

Новичок
Что б не создавать ещё ону тему напишу здесь. Проблема опять же с регулярными выражениями.
Вот строка:
album/dannyelfman/wanted-2198525
Вот выражение
(\w+)[_|-|\\/](\w+)[_|-|\\/](.+)

Мне нужно, что б регулярка разбила строку на 3 групы:

2198525
wanted
dannyelfman
(не имеет значения в какой последовательности)
выражение разбивает строку на:

album
dannyelfman
wanted-2198525

з.ы. Дял пояснения: Делаеться для возможности изменения урлов к контенту(в данном случае к альбомам песен) на зенде используя роутер с регулярными выражениями.

Помогите пожалуйста. Буду признателен.
 

N3K

Новичок
Нет. Мне нужно получить только 3 значения, начиная с конца строки, разделители которых являются "_", "-", "/".
 

N3K

Новичок
Эм.. ))) Обьясню ещё глубже. Я пишу не зенде. Регулярное выражение я передаю в контруктор класса Zend_Controller_Router_Route_Regex. А вот он уже и разбивает урл.Так что мне нужно одно регулярное выражение, которое будет передаватся в конструктор.
 

Ravanger

Новичок
(\w+)[-/](\w+)[-/]([\w\d]+)$

Сепараторы нужные допишите )

+ посоветую поставить прогу RegExBuddy, тогда многие проблемы с регулярками отпадут
 

N3K

Новичок
спасибо )
пользуюсь RegExr. С регулярками пока тяжко. Эту уже доработал :)
 
Сверху