![]() |
Регулярные выражения в Perl - распознавание URL
На форуме нужно добавить автоматическое распознавание URL (с преобразованием в ссылку). Как это сделать, если можно, с рабочим примером :rolleyes:
|
Рега получиться вроде /(\w+\:\/\/|www\.)[\w\-\.\:\@\#\%\/\[\]]+/
Как юзать прочти в мане. |
Этот regexp, если я правильно понял, не распознает ссылку в конце предложения (точку к ней приделает) и ссылки на скрипты вроде http://imho.ws/showthread.php?p=720420#post720420. Как подправить? :(
Хм. Кстати, неплохая идея взять исходники этого vBulletin, кажется, он правильно это делает :) Кто-нибудь может глянуть? |
Цитата:
Ведь если точка действительно в адресе и написана в нем, то будет ошибкой ее отрезать. Ну а если это нужно все-таки, то помоему проще/быстрее ее отрезать средствами PHP (ну или любого другого языка) |
Цитата:
|
Цитата:
Вобщем, чего спорить-то, если Вам нужно сами решайте, отрезать точку по Вашему принципу не сложно ведь, например так: /((?:\w+\:\/\/|www\.)[\w\-\:\@\#\%\/\[\]\?\=\&\.]+?)(?:\.\s|\s)/ Ну или краткая форма (помоему в ссылке почти все может быть при желании): /((?:\w+\:\/\/|www\.)[^\s]+?)(?:\.\s|\s)/ |
Сделал вот так:
$pattern = qr/\-\w\~\\\/\:\@\#\$\%\[\]\?\!\=\&\./; $message =~ s/((?:http:\/\/|www\.)[$pattern]+?)([\.\,\!\?]*[^$pattern]|\Z)/<a href=\"$1\">$1<\/a>$2/g; предполагалось, что ссылка должна прерваться любым символом, не входящим в $pattern или концом строки, причем если перед ним стоит N точек, запятых, ! и ?, то они не включаются в ссылку. однако, у конструкции (http://some.domain.com/test). в ссылку включается также закрывающая скобка ')' :confused: Других ошибок пока не было замечено. Что неправильно, объясните? Добавлено: теперь исправил на /((?:(?:https?|ftp):\/\/|www\.)[$pattern]+?)([\.\,\!\?\)]*(?:[^$pattern]|\Z))/ Со скобкой больше проблем нет, но зачем ее необходимо включать??? :( И еще, посоветуйте, кто знает хорошую книжку по регекспам :) |
Цитата:
|
Цитата:
http://www.softtime.ru/dic/id_dic=134&id_group= А тут вообще-то для PHP, но очень грамотно описаны какраз отличия от PERL, поэтому можено читать и для того и для другого языка. Рекомендую. |
RaZEr, Hubbitus:
Спасибо. Буду изучать :) |
| Часовой пояс GMT +4, время: 08:13. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.