Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Perl - Регулярные выражения / Regexpы

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

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
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Интернет » Web-программирование » Perl - Регулярные выражения / Regexpы


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru