Вопрос по регулярным выражениям

alexeyco

Новичок
Вопрос по регулярным выражениям

Есть функция:
PHP:
function replace($title = '', $sheet = '', $page = '') {

  $tpl   = "[title][ - sheet][: page]"; // Формат заголовка страницы

  $title = ($title != '') ? "\\1$title" : '';
  $sheet = ($sheet != '') ? "\\1$sheet" : '';
  $page  = ($page != '') ? "\\1$page" : '';

  $search = array(
    "#\[(.*?)title\]#si",    // Вот в этих регулярных выражениях и возникла трудность
    "#\[(.*?)sheet\]#si",
    "#\[(.*?)page\]#si"
  );

  $replace = array(
    $title,
    $sheet,
    $page
  );

  return preg_replace($search, $replace, $tpl);

}
Эта функция форматирует титул страницы. Например, так:
PHP:
replace("Сайт о хомячках", "Уход", "Кормление");
получим:
Сайт о хомячках - Уход: Кормление
А если попробовать так:
PHP:
replace("Сайт о хомячках", "Уход");
получим:
Сайт о хомячках - Уход
Понимаете да?
Но с некоторых пор понадобилось использовать такой подход:
PHP:
replace("", "Уход", "Кормление");
получаем:
- Уход: Кормление
а надо:
Уход: Кормление
Вопрос в том, чтобы составить регулярное выражение универсальным способом. Никто не может помочь в этом?
 

tashkentchi

Новичок
Первое, что в голову пришло:
PHP:
$sheet = ($sheet && $title) ? "\\1$sheet" : ($sheet ? $sheet  : '');
 

alexeyco

Новичок
Да, это безусловно выход... но нет ли вариантов с регулярными выражениями?
 

stas_t

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

PHP:
function format_header ($title = '', $sheet = '', $page = '')
{
    $sheet = strlen ($sheet) ? " - $sheet" : '';
    $page  = strlen ($page) ? " : $page" : ''; 

    return $title.$sheet.$page;
}
хотя, если хочется всё-таки попариться самому и помучить свой комп, замените (.*?) на ([^\]]*?) и смело продолжайте эксперименты
 

alexeyco

Новичок
Дело в том, что из администраторской части вот это:
PHP:
  $tpl   = "[title][ - sheet][: page]"; // Формат заголовка страницы
Должно быть настраиваемым
 

ПРЕВЕД

Новичок
PHP:
function replace($title = '', $sheet = '', $page = '') {
  
  // тело вашей идиотской функции

  $str = preg_replace($search, $replace, $tpl);
  return ltrim($str, ' -');
}
в остальном - лучше подумать и переделать весь этот ужоснах-функционал.
 

alexeyco

Новичок
Послушайте, я очень ценю участие в вопросе. Но я не спрашиваю как лучше, я совершенно конкретно составил вопрос. Страх перед регулярными выражениями - не более, чем страх постоянных клиентов jino-net и людей, упорно продолжающих жить в 19 веке... в первой половине 90-х. Я же не собираюсь парсить сотни килобайт текста, а хочу всего-лишь дать возможность формировать title страницы как можно более функционально и просто.
 

ПРЕВЕД

Новичок
alexeyco
Страх перед регулярными выражениями
не знаю, где ты в топике нашел этот "страх". скорее вытащил из собственного подсознания и теперь занимаешься самооправданием.

хочу всего-лишь дать возможность формировать title страницы как можно более функционально и просто
теперь я понял.
ты придумал новый революционный способ формирования тайтлов, а мы тут такие мракобесы - мешаем тебе нести в мир инновации!
теперь каждая кухарка сможет сочинить регвыр для тайтла! ура, товарищи! это победа!
 

alexeyco

Новичок
вот блин, надо же нарвался-таки на того, кто как и я владеет психокоррекцией... теперь меня хоть адекватным сделают.

Давайте закончим диалог а-ля Одесский Привоз и поговорим по делу. Я не нашел ничего, т.к. не искал. Давайте углубимся. Есть проблема - сделать тайтлы настраиваемыми. Причем, задача стоит не только в том, как и чем разделять логические части тайтлов, но и указывать порядок следования. Это должно использоваться не только в конкретном месте, но и во многих многих местах на сайтах. Я придумал в админке рисовать текстовое поле и давать администратору решать, что ему и как надо. Безусловно, если есть проблема, есть и несколько путей решения. Если предложите иной способ, который не менее удобен, я буду очень рад, если нет - помогите с регулярными выражениями.
 

ПРЕВЕД

Новичок
alexeyco
если у тебя ирландское рагу из логики и представления, то ты брутально формируешь всю страницу от тайтла до кончиков боди вместо того, чтобы отдать нужные переменные шаблону. ибо ставить двоеточие или черточку - это вселенская проблема дизайнера, а не продвинутого пользователя джино-нет, занимающегося психокоррекцией.
 

alexeyco

Новичок
Я не практикую, срок лицензии истек, да и не работал никогда по этой специальности... Я думал над вопросом - формировать ли тайтлы так или через темплаты... Насколько я выиграю или потеряю, если буду использовать Ваш метод, ведь шаблонизатор жрет так, что запросы к БД - сущий пустячок по сравнению с ними... Вы можете помочь или нет в составлении регулярки или мы будем состязаться в игре "кто упрямее"?
 

ПРЕВЕД

Новичок
alexeyco
ведь шаблонизатор жрет так
у тебя еще и шаблонизатор - говно. видишь, как все запущенно? не от хорошей жизни ты упрямо пытаешься регвырами тайтл сформировать. сам себя загнал в клетку идиотской архитектуры и мечешься теперь.
в застревании на регулярных выражениях тоже патология проглядывает.

предложил бы людям посостязаться в игре "кто придумает лучшую архитектуру для моей задачи", а не ел им моск.
 

alexeyco

Новичок
Ну нет, я не говорю, что шаблонизатор говно... я люблю phpBB - а в нашем случае решил вообще от олимпа взять шаблонизатор. Дело в том, что архитектура системы требует предварительных шаблонных вычислений логических частей страницы, потом вставки в основной темплат... Если хоть слово поняли из того, что я сказал, то хорошо... Так вот... ресурсозатраты на эти вычисления раза в 2 больше, чем на запросы к БД... В среднем (на згрузку страницы). То есть, на виртуалке с 64 мб оперативы страница грузится около 0,1 - 0,3 сек... Вероятно, это неплохо, т.к. сам phpBB ни чуть не меньше отбирает.

Теперь по делу... ПРЕВЕД, ты как и я - упрямый черт... Я решил вынести все заголовковые поля в overal-шаблон.... там же и формировать title. Но если мне кто-то напишет, что не удобно, я скажу кого проклинать.

ЗЫ
"Виртуалка" - это не VDS, а у меня на ноуте VMWare (а то будете прикапываться опять)
 

AmdY

Пью пиво
Команда форума
Автор оригинала: alexeyco
Ну нет, я не говорю, что шаблонизатор говно... я люблю phpBB - а в нашем случае решил вообще от олимпа взять шаблонизатор. Дело в том, что архитектура системы требует предварительных шаблонных вычислений логических частей страницы, потом вставки в основной темплат... Если хоть слово поняли из того, что я сказал, то хорошо... Так вот... ресурсозатраты на эти вычисления раза в 2 больше, чем на запросы к БД... В среднем (на згрузку страницы). То есть, на виртуалке с 64 мб оперативы страница грузится около 0,1 - 0,3 сек... Вероятно, это неплохо, т.к. сам phpBB ни чуть не меньше отбирает.
phpBB - это как раз недошаблонизатор, конечно он долго работает. Гораздо проще использовать php-шаблоны.
 

leadaxe

Новичок
ну наворотили.. уже и поссориться успели

Итак комментарии говорят следующее:
у вас запутанная и туманная логика в функции - смените ее, станет проще.

список шаблонов, как я понял, не большой - не надо деть его мега универсальным на регах.
 

alexeyco

Новичок
да нет, шаблоны ни при чем ))) еперный театр.... суть проблемы выеденного гроша не стоит, я для себя ее решил но Вам всем за Вашу вредность о решении не скажу.. так вот
 

ПРЕВЕД

Новичок
Гораздо проще использовать php-шаблоны.
alexeyco, предупредил бы с самого начала, что твоя религия не дозволяет использовать php-шаблоны и путь праведника - это реги.

Вам всем за Вашу вредность о решении не скажу.. так вот
не гневойса, барин, пожалей холопов своих! сложим пред тобой головушку горемычную, тока б решенье твое вразуметь!
 

alexeyco

Новичок
Я понимаю Ваш стеб, но я не претендую на звание "папки" и поэтому статус "ламосника" (нет, ну пожалуйста) позволяет мне использовать что угодно и где угодно... А если Вы смотрели последний класс темплатов от phpBB (я имею в виду Олимп), то там как раз подход таков, что используются компилированные темплаты (то есть, текстовый темплат компилится и кешируется а потом уже все остальное)... Так вот! Я решил вынести заголовковые поля в отдельный файл... Теперь заголовок генерится в шаблоне... Ставьте свечку своим богам, г-н ПРЕВЕД ))
 
Сверху