imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 15.12.2004, 00:37     # 1
nemur
Junior Member
 
Регистрация: 25.03.2004
Адрес: Питер
Сообщения: 112

nemur Молодецnemur Молодецnemur Молодец
Lightbulb Регулярные выражения в Perl - распознавание URL

На форуме нужно добавить автоматическое распознавание URL (с преобразованием в ссылку). Как это сделать, если можно, с рабочим примером
nemur вне форума  
Старый 15.12.2004, 00:54     # 2
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Рега получиться вроде /(\w+\:\/\/|www\.)[\w\-\.\:\@\#\%\/\[\]]+/
Как юзать прочти в мане.
RaZEr вне форума  
Старый 15.12.2004, 01:11     # 3
nemur
Junior Member
 
Регистрация: 25.03.2004
Адрес: Питер
Сообщения: 112

nemur Молодецnemur Молодецnemur Молодец
Этот regexp, если я правильно понял, не распознает ссылку в конце предложения (точку к ней приделает) и ссылки на скрипты вроде http://imho.ws/showthread.php?p=720420#post720420. Как подправить?

Хм. Кстати, неплохая идея взять исходники этого vBulletin, кажется, он правильно это делает Кто-нибудь может глянуть?

Последний раз редактировалось nemur; 15.12.2004 в 01:15.
nemur вне форума  
Старый 15.12.2004, 01:45     # 4
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
nemur:
Этот regexp, если я правильно понял, не распознает ссылку в конце предложения (точку к ней приделает) и ссылки на скрипты вроде http://imho.ws/showthread.php?p=720420#post720420. Как подправить?
Вы предлагаете в регулярном выражении анализировать синтаксис русского (английского, другого) языка, чтобы найти конец предложения? А как тогда с безграмотностью быть?
Ведь если точка действительно в адресе и написана в нем, то будет ошибкой ее отрезать.

Ну а если это нужно все-таки, то помоему проще/быстрее ее отрезать средствами PHP (ну или любого другого языка)
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.

Последний раз редактировалось Hubbitus; 15.12.2004 в 01:47.
Hubbitus вне форума  
Старый 15.12.2004, 01:56     # 5
nemur
Junior Member
 
Регистрация: 25.03.2004
Адрес: Питер
Сообщения: 112

nemur Молодецnemur Молодецnemur Молодец
Цитата:
Hubbitus:
Вы предлагаете в регулярном выражении анализировать синтаксис русского (английского, другого) языка, чтобы найти конец предложения?
Нет, зачем же... Просто, скажем, если за точкой пробел, то это конец предложения, и точка не входит в ссылку. Опять-таки, vBulletin справляется (см. ссылки в предыдущих постах).
nemur вне форума  
Старый 15.12.2004, 14:05     # 6
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
nemur:
Просто, скажем, если за точкой пробел, то это конец предложения, и точка не входит в ссылку.
Это лишь наиболее вероятно, но не всегда правильно...
Вобщем, чего спорить-то, если Вам нужно сами решайте, отрезать точку по Вашему принципу не сложно ведь, например так:
/((?:\w+\:\/\/|www\.)[\w\-\:\@\#\%\/\[\]\?\=\&\.]+?)(?:\.\s|\s)/
Ну или краткая форма (помоему в ссылке почти все может быть при желании):
/((?:\w+\:\/\/|www\.)[^\s]+?)(?:\.\s|\s)/
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 15.12.2004, 23:54     # 7
nemur
Junior Member
 
Регистрация: 25.03.2004
Адрес: Питер
Сообщения: 112

nemur Молодецnemur Молодецnemur Молодец
Сделал вот так:

$pattern = qr/\-\w\~\\\/\:\@\#\$\%\[\]\?\!\=\&\./;
$message =~ s/((?:http:\/\/|www\.)[$pattern]+?)([\.\,\!\?]*[^$pattern]|\Z)/<a href=\"$1\">$1<\/a>$2/g;

предполагалось, что ссылка должна прерваться любым символом, не входящим в $pattern или концом строки, причем если перед ним стоит N точек, запятых, ! и ?, то они не включаются в ссылку.

однако, у конструкции (http://some.domain.com/test). в ссылку включается также закрывающая скобка ')' Других ошибок пока не было замечено. Что неправильно, объясните?

Добавлено:
теперь исправил на
/((?:(?:https?|ftp):\/\/|www\.)[$pattern]+?)([\.\,\!\?\)]*(?:[^$pattern]|\Z))/
Со скобкой больше проблем нет, но зачем ее необходимо включать???
И еще, посоветуйте, кто знает хорошую книжку по регекспам

Последний раз редактировалось nemur; 16.12.2004 в 01:40.
nemur вне форума  
Старый 16.12.2004, 12:52     # 8
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Цитата:
И еще, посоветуйте, кто знает хорошую книжку по регекспам
Начни с мануала
RaZEr вне форума  
Старый 16.12.2004, 14:34     # 9
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
nemur:
И еще, посоветуйте, кто знает хорошую книжку по регекспам
http://php.spb.ru/regular_expression.html Здесь советуют хорошую бумажную книгу (может где-то есть и электронная), а также статьи по регам.

http://www.softtime.ru/dic/id_dic=134&id_group= А тут вообще-то для PHP, но очень грамотно описаны какраз отличия от PERL, поэтому можено читать и для того и для другого языка. Рекомендую.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 16.12.2004, 22:14     # 10
nemur
Junior Member
 
Регистрация: 25.03.2004
Адрес: Питер
Сообщения: 112

nemur Молодецnemur Молодецnemur Молодец
RaZEr, Hubbitus:
Спасибо. Буду изучать
nemur вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 22:34.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.