Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.38.176] |
|
Сообщ.
#1
,
|
|
|
Делаю форум. Возникла необходимость выделения ссылок в тексте при помощи соответствующих тегов.
Например, мне нужно заменить .............. Вот, кстати сайт на эту тему: <a class='tag-url' href='http://www.abrakadabra.ru/' target='_blank'>http://www.abrakadabra.ru/</a> .............. на .............. Вот, кстати сайт на эту тему: <a href="http://www.abrakadabra.ru/" target="_blank">http://www.abrakadabra.ru/</a> .............. Можно ли решить данную задачу при помощи использования рег. выражений? Как работать с регулярными выражениями? Заранее спасибо за линки на мануали по PHP, но мне этого не надо. Я хочу понять, как работают такие функции как preg_replace, ereg_replace и др. Также я прекрасно понимаю, что можно создать свой алгоритм, но будет ли это актуальным, если имеется возможность использования вышеописанных функций? Всем заранее спасибо! 8) |
Сообщ.
#2
,
|
|
|
Извините, Ваш форум немного видоизменил первый отрывок кода.
В оригинале тегов и .. там не было. Так что, прошу иметь ввиду. |
Сообщ.
#3
,
|
|
|
Еще раз извиняюсь перед модераторами данного форума. Во втором моем сообщений опять Ваш форум заменил оригинальный текст.
Приведу еще раз, только вставляя в теги пробелы: Цитата В оригинале тегов [ u r l = ... ] и [ / u r l ] там не было. Так что, прошу иметь |
Сообщ.
#4
,
|
|
|
Цитата WinOpen, 29.02.04, 22:24 Я хочу понять, как работают такие функции как preg_replace, ereg_replace и др. вам шашечки, или ехать. как работают эти функции - это рассказывать алгоритм поиска и замены одних фрагментов другими. что делают - это рассказывать, что на входе фукнции, и что на выходе. preg_replace - задаешь что менятm, на что? и строку, в которой надо менять. $res=preg_replace("|<a class='tag-url' href='http://(*.)' target='_blank'>(*.)</a>|U","<a href=\\1>\\2</a>",$str); а обьяснение, что есть регулярные выражения - читай в любой книжке по перлу или пхп |
Сообщ.
#5
,
|
|
|
Скрипт не работает. Причины ниже:
WinOpen, на форуме Invision Power Board, как в многих других, любое выражение, начинающееся с http:// автоматически определяется как ссылка, и вставляются теги [ url] и [ /url]. Вижу, Demo_S'у тоже не удалось представить код в правильном виде (WinOpen, Demo_S на самом деле ответил верно, вот только форум опять переработал приведенный код). Для того, чтобы лишне не утруждать уважаемого Demo_S, выкладываю тот же код вне форума, на своем сайте, тем самым избегая случая, который может повлечь за собой трансформирмацию скриптом данного форума оригинального исходного кода ответа: http://pub3.nm.ru/pub/html/1.htm (спасибо Jin_X'у за FTP общего пользования ) |
Сообщ.
#6
,
|
|
|
Ну что-то вроде:
sub specialChars { my@p=@_; map s/([^\wабвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ])/'&#'.ord($1).';'/geo,@p; +(wantarray?@p:$p[0]) } sub urlEncode { my@p=@_; map s/(.)/sprintf('%%%02X',ord$1)/geo,@p; +(wantarray?@p:$p[0]) } %SINONIM=( 'url'=>sub{ my$attr=shift||return; my$value=shift; my%att=(('url'.$attr)=~/(\w*)=(\S+)/go); if($att{url}=~/^(http|ftp|smtp|pop3|https|ftps|mailto)\:(\/\/|)(.+)$/io&& ( (lc($1) ne 'mailto'&&length($2)==2)|| (lc($1) eq 'mailto'&&!$2) )) { return '<a href="'.&urlEncode($att{url}).'">'.&specialChars($value||$att{url}).'</a>'; } else { return '[url'.$attr.']'.$value.'[/url]'; } } ); sub translit { my$tag=lc(shift)||return; my$attr=shift; my$value=shift; return &{$SINONIM{$tag}}($attr,$value) if exists$SINONIM{$tag}; return '['.$tag.$attr.']'.$value.'[/'.$tag.']'; } sub AUTOLOAD { print join', ',caller; } print "Content-type: text/html; charset=windows-1251\n\n"; open F,'<text.txt'; #flock F,4; while(<F>) { s/\[(\w+)([^\[\]]*)\]([^\[\]]*)\[\/\1\]/&translit($1,$2,$3)/gieo; print; } #flock F,8; close F; %SINONIM сам доработай |
Сообщ.
#7
,
|
|
|
а что такое "%SINONIM"? Это функция или что? Как она работает?
|