Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Perl: гиперссылка из строки адреса 
:(
    Опции темы
NSCO
Дата 24.5.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.11.2007

Репутация: нет
Всего: нет



Приветствую, коллеги.

Подскажите, как на перле сделать гиперссылку из строки адреса.

То есть, из строки 'http://vingrad.ru' сделать '<a href=http://vingrad.ru>http://vingrad.ru</a>'

А строку '<a href=http://vingrad.ru>бла-бла-бла</a>' оставлять как есть.
PM MAIL   Вверх
kavkaz
Дата 24.5.2009, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 26.12.2007

Репутация: 1
Всего: 2



В своё время на скорую руку придумал решение подобной проблемки, а со временем как то приелось - и решил оставить.
Суть в следующем:
– регулярным выражением извлекаем по всем тексту ссылки из тэгов <a href="ссылка"> и <img src="ссылка">, попутно заменяя на какой нить очень редкий символ, например "\0", и впихиваем их в массив
– делаем обработку http://ссылка на <a href="http://ссылка">
– делаем обратно замену "\0" по всему тексту на поочередно извлекаемые из массива хранящиееся ссылки

получается нечто вроде этого:
Код

my @steck;
$text =~ s%(<(?:a|img)[^>]+http://[^>]+>)%push @steck, $1; "\0"%ige;
$text =~ s|(http://\S+)|process_url($1)|ige;
$text =~ s|\0|shift @steck|ige;


коряво, зато работает smile

можно попробовать вариант с регулярным выражением, которое обходит тэги <a> и <img>, но там были свои подводные камни
PM MAIL ICQ Skype   Вверх
NSCO
Дата 1.6.2009, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.11.2007

Репутация: нет
Всего: нет



kavkaz, Спасибо, попробую.


Коллеги, где я на этом сайте видел вот этот пример конвертации строки в ссылку?

s[((?:ht|f)tp://(?:[\w\-]+\.)+\w+(?:\:\d+)?(?:/[\w\.\~,\-/]*(?:\?[\w;% \+\-,\=\&]+)?(?:\*)?)?)][\<a href="$1">$1\</a>]goi;

Там ещё пара была... Не могу найти.

У этого же примера вместо s[((?:ht|f)tp: лучше сделать s[((?:ht|f)tp(?:s|):

Но он ссылки со спецсимволами на конце обрезает. 
К примеру отрезает '.ru' от  https://www.nic.ru/whois/?query=vingrad.ru

Это сообщение отредактировал(а) NSCO - 1.6.2009, 12:41
PM MAIL   Вверх
gcc
Дата 1.6.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



PM WWW ICQ Skype GTalk Jabber   Вверх
NSCO
Дата 3.6.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.11.2007

Репутация: нет
Всего: нет



Regexp впечатлил - монстр. Но провайдер его не поддерживает.

Пока обошёлся этим

  $str =~ s/\b(http|https|ftp):(\/\/)([a-z0-9.:@*()~#%\]\[_?=&\/\\-])+/<a href=$&>$&<\/a>/gi;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0965 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.