OLEX
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Есть скрипт для обработки шаблонов. Ссылки в шаблоне в таком виде: ~links~Ссылки~ преоразуются в вид <a href=http://site.com/cgi-bin/view.cgi?page=links>Ссылки</a> таким макаром: s/~(.+)~(.+)~/<a href=$site_url\/cgi-bin\/view.cgi?page=$1>$2<\/a>/g; Теперь надо сделать так, если ~links~, то вывести <a href=http://site.com/cgi-bin/view.cgi?page=links>Ссылки</a> а если ~links.shtml~, то вывести <a href=http://site.com/user_pages/links.shtml>Ссылки</a> Делаю так: Код: while (/~(.+?)~(.+?)~/) { $a1=$1; $a2=$2; if ($a1 =~ /shtml$/) { s/~$a1~$a2~/<a href=$site_url\/user_pages\/$a1>$a2<\/a>/g; } else { s/~$a1~$a2~/<a href=$site_url\/cgi-bin\/view.cgi?page=$a1>$a2<\/a>/; } } # end while | Проблема возникает если в тексте ссылкы встречаются ключевые знаки рег.выражений, типа '?' '(' ')' и т д. Скрипт тогда запутывается в бесконечном цикле и виснет. Приходится экранировать их так: $a1=~s/\?/\\?/g; $a2=~s/\?/\\?/g; $a1=~s/\(/\\(/g; $a2=~s/\(/\\(/g; $a1=~s/\)/\\)/g; $a2=~s/\)/\\)/g; и в конце убирать экраны. А это ж не все кода... Как сделать проще? Добавлено: Короче покумекал сам малость, что-то выдал уже получше: Код: s!~(.+)~(.+)~!$1=~/shtml$/?"<a href=$site_url/user_pages/$a1>$a2</a>":"<a href=$site_url/cgi-bin/view.cgi?lang=$lang&page=$1>$2</a>"!eg; | тока в случае с ссылками вида ~links.shtml~ оно не работает, ссылки просто исчезают, не пойму, работает ли реулярное выражение $1=~/shtml$/ в средине регулярного выражения? Добавлено: Пытался поизвращаться так: Код: s!~(.+)~(.+)~! $_=$1; m+shtml$+ ?"<a href=$site_url/user_pages/$a1>$a2</a>" :"<a href=$site_url/cgi-bin/view.cgi?page=$1>$2</a>" !eg; | не помогло Добавлено: !!!!!!!ДОШЛО БЛИН!!!!!!! После регулярного выражения $1=~/shtml$/ в средине регулярного выражения пропадали старые значения $1 и $2 Окончательный вариянт: Код: s!~(.+)~(.+)~!$a1=$1;$a2=$2;$a1=~/shtml$/?"<a href=$site_url/user_pages/$a1>$a2</a>":"<a href=$site_url/cgi-bin/view.cgi?page=$a1>$a2</a>"!eg; | Называется сам спросил - сам ответил | Всего записей: 3590 | Зарегистр. 09-07-2002 | Отправлено: 03:52 30-08-2005 | Исправлено: Cheery, 18:37 27-02-2008 |
|