Forum Webscript.Ru

Программирование => PHP => Тема начата: tarya от 10 Сентября 2003, 19:30:43

Название: ereg_replace - точное выделение адреса сложного адреса
Отправлено: tarya от 10 Сентября 2003, 19:30:43
Задумался на тем чтоб сделать выделение адреса автоматически как тут на форуме:

Почитал по выражениям немного написал:


$body = ereg_replace ("http://(([A-Za-z0-9./?\\-])*)", "\\\\0", $body);



все работает, но потом оказалось что когда приходится обработать более длинную стоку типа http://www.yandex.ru/yandsearch?rpt=rad&text=php то получается совсем плохо, не может.


Подскажите регулярное выражение для полного соответствия чтоб  любую стоку адреса обработало.

Спасибо большое
Название: ereg_replace - точное выделение адреса сложного адреса
Отправлено: Меняздесьдавнонет от 10 Сентября 2003, 19:49:10
идеального паттерна не может быть по определению.
допустим, запятая может быть как просто запятой, так и частью адреса.
и так со многим символами.
так что, пиши просто http://(\\S*)"  - все от хттп до пробела - и будет тебе щастье.
Название: ereg_replace - точное выделение адреса сложного адреса
Отправлено: Макс от 11 Сентября 2003, 00:45:32
хмм... вообще-то URL-ы каким-то RFC описываются и набор символов ограничен и запятая не может быть частью адреса (echo urlencode(",");)  Это современные броузеры начали "умничать" и "правильно" обрабатывать http://a.ru?a=русский,текст
На php.spb.ru был регексп подсветки адресов или из какого-то бесплатного форума вытяни (типа phpBB)
Название: ereg_replace - точное выделение адреса сложного адреса
Отправлено: Макс от 11 Сентября 2003, 00:48:36
Цитировать
http://a.ru?a=русский,текст

[off]мда, VBulletin даже неправильные ссылки "правильно" отрабатывает ;) [/off]
Название: ereg_replace - точное выделение адреса сложного адреса
Отправлено: Меняздесьдавнонет от 11 Сентября 2003, 11:18:53
дело не в русском тексте, а в очень распространенных ссылках на флеш ролики, уж не знаю, что там на сервере стоит.
вила ?0,0,32456,0

и дело не в том, что современные браузеры такие умные, а в объективной реальности
Название: ereg_replace - точное выделение адреса сложного адреса
Отправлено: mikelsv от 11 Сентября 2003, 20:49:06
Нашел интересный код. Попробуй:

$text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]",
                     "\\\\0", $text);
Обязательно напиши, что получилось.
Название: ereg_replace - точное выделение адреса сложного адреса
Отправлено: tarya от 12 Сентября 2003, 17:57:55
Цитировать
mikelsv:
Нашел интересный код. Попробуй:[/quote


да мне бы по ссылке адресов, но я кажется разобрался в чем беда была :)
Название: ereg_replace - точное выделение адреса сложного адреса
Отправлено: Zpt от 13 Сентября 2003, 23:48:03
Вообще вроде всего 3 варианта где может быть использована ссылка:
src=
href=
background=

поэтому лучше всего искать от начала, потом смотреть следующий символ после равно, и на такой символ должна заканчиваться ссылка, если не стоит символ отмены, тогда продолжать поиск. Еще худший вариант, если после = стоит не ковычка (однерная, двойная), а символ, значит заканчивается ссылка или на пробел или на символ завершающего тэга, а еще может стоять пробел внутри кавычек допустим как параметр для какой-то функции.

Вобщем нормальный сценарий для 100% выделения ссылок можно написать, но он будет медленно работать, чем-то всегда приходится жертвовать... :(