Никак не могу написать регулярное выражение чтобы конструкции типа:
1. http://www.google.com/search?hl=ru&q=%3CA&btnG=%CF%EE%E8%F1%EA+%E2+Google
2. www.google.com/search?hl=ru&q=%3CA&btnG=%CF%EE%E8%F1%EA+%E2+Google
3. google.com/search?hl=ru&q=%3CA&btnG=%CF%EE%E8%F1%EA+%E2+Google
4. gg_g@ggg.ggg-g.ru
заменялись на ссылки в HTML-е. Задачка выглядит просто, но почему-то не решается. Заранее спасибо.
Как видно этот форум справился с задачкой на три четверти.
Забыл сказать, что ещё ссылка может быть на ftp и начинаться не с пробела, а скажем с перевода коретки или конца строки.
Уверен что бывалые уже сталкивались с такой проблемой.
В данном случае форум справился на 100%, т.к. в "google.com/...." нет признаков по которым его нужно считать урлом. По хорошему он и www... не должен был трогать.
Для того, чтоб сделать то что ты хочешь нужно сначала определиться с тем - ЧТО ты считаешь урлом, т.е. какие символы в нем не допустимы и какие являются разделителем.
Если строго придерживать RFC то недопустимые символы, это все кроме тех, что разрешены :)
Но лучше его не придерживаться, т.к. в таком случае многие штучки работать не будут (см. ниже).
Допустим урл это то, что начинается с http:// или www.
Недопустимы все пробельные символы - \s.
$url = "\s";
А в качестве разделителей укажем - "?,()![]
$url_del = "\"\?,()!\[\]";
Для e-mail - наоборот, нужно указывать допустимые.
$eml = "\w-\.";
По поводу FTP
С одной стороны - его нельзя делать вместе с http, так как для него нужно так же как и в случае с e-mail указывать допустимые символы. С другой стороны - никто же не будет писать ftp://domain.com?lalala.
Но тут ещё одна штука, ведь многие пишут фтп не как ftp://domain.com а так ftp.domain.com.
Если ты хочешь заменять ftp. на ftp:// - тогда нужно делать отдельно. Но это ты сам наверное сможешь. По этому сделаем ftp вместе с http.
$str = '
Никак не могу написать регулярное выражение чтобы конструкции типа:
1. http://www.google.com/search?hl=ru&...1%EA+%E2+Google
2. www.google.com/search?hl=ru&q=%3CA&...1%EA+%E2+Google
3. google.com/search?hl=ru&q=%3CA&btnG=%CF%EE%E8%F1%EA+%E2+Google
4. gg_g@ggg.ggg-g.ru
заменялись на ссылки в HTML-е. Задачка выглядит просто, но почему-то не решается. Заранее спасибо.
Дополнительно:
ftp://domain.com
посмотри http://domain.com!
бывает запятая в урле http://domain.com?srarch=1,2,3,4,&aaa=bbb, а бывает после него
бывает вопросительный знак в урле и после него http://domain.com?srarch=1,2,3,4,&aaa=bbb?
редирект http://domain.com?redir=http://flasher.ru/?
а если в самом редиректе есть query http://domain.ru?redir=http://flasher.ru/?q=query?
ещё бывает в скобках:
(http://domain.com)
[http://domain.com]
и даже кавычках
"http://domain.com"
';
$url = "\s";
$url_del = "\"\?,()!\[\]";
$eml = "\w-\.";
$str = preg_replace("/((http:\/\/|ftp:\/\/)[^$url]+)(?<![$url_del])/", '<a href="\\1">\\1</a>', $str);
$str = preg_replace("/(?<!http:\/\/)(www\.[^$url]+)(?<![$url_del])/", '<a href="http://\\1">\\1</a>', $str);
$str = preg_replace("/([$eml]+\@[$eml]+)/", '<a href="mailto:\1">\1</a>', $str);
$str = preg_replace("/\n/", '<br>', $str);
echo $str;
Выше видно - как с этим справился форум.
С твоими прмерами наш регэксп справится так же, а с дополнительными - лучше:)
----
Дополнительно:
ftp://domain.com
посмотри http://domain.com!
бывает запятая в урле http://domain.com?srarch=1,2,3,4,&aaa=bbb, а бывает после него
бывает вопросительный знак в урле и после него http://domain.com?srarch=1,2,3,4,&aaa=bbb?
редирект http://domain.com?redir=http://flasher.ru/?
а если в самом редиректе есть query http://domain.ru?redir=http://flasher.ru/?q=query?
ещё бывает в скобках:
(http://domain.com)
[http://domain.com]
и даже кавычках
"http://domain.com"
-------
Но ведь google.com - это тоже ссылка на страничку.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.