информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Ядро Linux избавляется от российских... 
 20 лет Ubuntu 
 Tailscale окончательно забанила... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / guestbook
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Дык, что ж ты сразу регэксп не привел 16.12.05 11:45  Число просмотров: 3723
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
while (<>) {
#	s#((?:http|ftp|https)://.*?)([\s()"'\\<>\[\]])#<a href="$1" target=_blank>$1</a>$2#gi;
	s#((?:http|ftp|https)://.*?)(\.*[\s()"'\\<>\[\]])#<a href="$1" target=_blank>$1</a>$2#gi;
	print;
}

---

Выкусываем любое количество точек перед терминальными символами. Проверил - работает

> Что касается изменения при записи, я все же предпочитаю
> хранить оригинал, сохраняя гибкость на случай будущих

Поддерживаю
<guestbook>
Про ссылки 15.12.05 00:48  
Автор: Heller <Heller> Статус: Elderman
Отредактировано 15.12.05 00:50  Количество правок: 2
<"чистая" ссылка>
Когда я пишу ссылку непосредственно в сообщении, то часто ставлю после нее точку: http://bbspot.com/archives/index_top11.html. Форум эту последнюю точку тоже рассматривает как часть ссылки, что не есть гуд. ИМХО, последнюю точку из ссылки надо убирать.
если б это можно было сделать одним простым регекспом 15.12.05 04:06  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Можно :) 15.12.05 07:47  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
У меня когда-то вставала схожая задача:

Вопрос по регулярным выражениям
дело в том, что точка - это вполне разрешенная часть url, и я не могу превращать ее в стоп-символ 15.12.05 12:00  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Не знаю ни одного урла с точкой в конце (хотя это и не запрещено) 15.12.05 12:30  
Автор: amirul <Serge> Статус: The Elderman
Отредактировано 15.12.05 12:35  Количество правок: 3
<"чистая" ссылка>
Если уж очень припрет, то ссылку с точкой можно вставить в специальное поле (внизу), которое эту самую ссылку преобразовывать не будет или (для продвинутых) заменить ее шестнадцатиричным кодом со знаком процента. Ну а пробел - запрещенный символ, так что

/(bla-bla-bla)\.*\s/

Должно помочь
речь не об этом 15.12.05 14:14  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Урлы сейчас выкусываются регекспом, который берет все, что начинается с http/https/ftp/ и заканчивается набором стоп-символов. Если я добавлю точку в стоп-символы, урл закончится на первой же точке в адресе. Быстрая правка этого регекспа мне сходу в голову не приходит, а сильно усложнять его не хочется, поскольку отрабатывает он при каждом показе сообщения.
А добавить *после* выкусывания урла из текста откусывание замыкающей точки 15.12.05 14:55  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> усложнять его не хочется, поскольку отрабатывает он при
> каждом показе сообщения.

s/(\w*)\.$/$1/

Или этот регэксп автоматом сразу заменяет http... на < a href=http... > ?
да, конечно сразу 15.12.05 15:16  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Можно конечно добавить второй регексп, пробегающий поверх и чистящий конечные точки.
Тоже вариант 15.12.05 17:50  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Можно конечно добавить второй регексп, пробегающий поверх и
> чистящий конечные точки.

Если запускать его только в том случае, если первый регэксп что-то нашел
ok 15.12.05 21:34  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Если я правильно понял, 16.12.05 02:54  
Автор: Heller <Heller> Статус: Elderman
Отредактировано 16.12.05 02:55  Количество правок: 1
<"чистая" ссылка>
то замена "link" на <a href="link"> проводится при отображении сообщения и в базе хранится сообщение в изначальном виде чтобы его можно было править.

По-моему было бы эффективнее хранить в базе сообщений ссылки уже преобразованные к виду <a href="link">. В случае же, если надо сообщение поправить, то убрать тэги <a> перед правкой сообщения не составляет труда. Зато это снимет нагрузку по преобразованию ссылок при каждом просмотре сообщения.

ЗЫ. Что насчет такого регеспа?:
$comm=~s#((http|ftp)://[\w\.\-?@:=&%\#/]+)([^\.,?:-]*)#<a href="$1" target=_blank>$1$3</a>#g;
Не уверен, что будет работать, но главное идея (на скорую руку переделал рабочий регесп со своего сайта, который тоже страдает от точек в ссылках - идея поправить это у себя пришла только сейчас, когда заметил это на bugtraq :), если при переделке не наделал косяков - должно работать).
да я уже сделал парой регекспов 16.12.05 04:32  
Автор: dl <Dmitry Leonov>
Отредактировано 16.12.05 04:45  Количество правок: 1
<"чистая" ссылка>
if($text =~ s#((?:http|ftp|https)://.*?)([\s()"'\\<>\[\]])#<a href="$1" target=_blank>$1</a>$2#gi)
{
	$text =~ s#<a href="(.*?)[.,]" target=_blank>(.*?)([.,])</a>#<a href="$1" target=_blank>$2</a>$3#gi;
}

---

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

> ЗЫ. Что насчет такого регеспа?:
> $comm=~s#((http|ftp)://[\w\.\-?@:=&%\#/]+)([^\.,?:-]*)#
> <a href="$1" target=_blank>$1$3</a>#g;

Неа, не работает. Звездочка во вторых скобках допускает отсутствие соответствующей ей точки, которая спокойно влезает в шаблон первой скобки.
Дык, что ж ты сразу регэксп не привел 16.12.05 11:45  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
while (<>) {
#	s#((?:http|ftp|https)://.*?)([\s()"'\\<>\[\]])#<a href="$1" target=_blank>$1</a>$2#gi;
	s#((?:http|ftp|https)://.*?)(\.*[\s()"'\\<>\[\]])#<a href="$1" target=_blank>$1</a>$2#gi;
	print;
}

---

Выкусываем любое количество точек перед терминальными символами. Проверил - работает

> Что касается изменения при записи, я все же предпочитаю
> хранить оригинал, сохраняя гибкость на случай будущих

Поддерживаю
а, ну да 16.12.05 14:23  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Только $text =~ s#((?:http|ftp|https)://.*?)([.,]*[\s()"'\\<>\[\]])#<a href="$1" target=_blank>$1</a>$2#gi; - запятые тоже попадаются
Не если уж вычищать :-) 16.12.05 15:45  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Только $text =~
> s#((?:http|ftp|https)://.*?)([.,]*[\s()"'\\<>\[\]])#&
> lt;a href="$1" target=_blank>$1</a>$2#gi; -
> запятые тоже попадаются

То ".*?" не лучше ли заменить на ".+"
Это если я правильно понял, что имелось в виду
ну тут уже не очень принципиально, + или * 16.12.05 18:11  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
А вот вопросительный знак критичен - в этом контексте он отключает "жадность" регекспа, заставляя выбирать самую короткую пододящую строчку.
А-а-а. Точно. Забыл 19.12.05 12:35  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
На самом деле я не строитель, а каску я на стройке украл :-)
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach