![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Aug 2001
Адрес: Москва
Сообщений: 38
|
Никак не могу написать регулярное выражение чтобы конструкции типа:
1. http://www.google.com/search?hl=ru&q...%EA+%E2+Google 2. http://www.google.com/search?hl=ru&q...%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-е. Задачка выглядит просто, но почему-то не решается. Заранее спасибо. |
|
|||||
|
Регистрация: Aug 2001
Адрес: Москва
Сообщений: 38
|
Как видно этот форум справился с задачкой на три четверти.
Забыл сказать, что ещё ссылка может быть на ftp и начинаться не с пробела, а скажем с перевода коретки или конца строки. Уверен что бывалые уже сталкивались с такой проблемой. |
|
|||||
|
Регистрация: Dec 1999
Сообщений: 258
|
В данном случае форум справился на 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. http://www.google.com/search?hl=ru&q...%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" ------- |
|
|||||
|
Регистрация: Aug 2001
Адрес: Москва
Сообщений: 38
|
Но ведь google.com - это тоже ссылка на страничку.
__________________
Изобретаем велосипеды на заказ ;) |
![]() |
Часовой пояс GMT +4, время: 17:57. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|