Forum Webscript.Ru

Программирование => PHP => Тема начата: koder от 23 Октября 2006, 02:19:12

Название: Рег выражения и выделение ссылок
Отправлено: koder от 23 Октября 2006, 02:19:12
Цель - выделить в тексте ссылки.
Тоесть из http://s.ru сделать http://s.ru
Но также нужно учесть что ссылока уже может быть выделеной, тогда повторное выделение очень не желательное!!!

Вот что написал: (точнее взял тут (http://xpoint.ru/know-how/PHP/GotovyieResheniya?10#ZamenaNekotoroyPodstrokiTol\'ko) - советую глянуть )
function addlinks($html)
{
$substring = \'http\\S+\';
$replacement = \'$2\';
$result = preg_replace("/((?:^|> )[^<]*)($substring)/si", \'$1\'.$replacement, $html);

return $result;
}

Функция в большенстве случает работает, но недавно заметил вот такую проблемы
Если строка такая
echo addlinks(" text text http://s.ru text
 text");
то все выделяется правильно, а вот при таком варианте
echo addlinks("
text text http://s.ru text
 text");
уже не работает! Что не так в рег. выражении понять не могу
Название: Рег выражения и выделение ссылок
Отправлено: brainkiller от 23 Октября 2006, 16:19:02
function addlinks($html)
{
$html = eregi_replace("http://(([A-Za-z0-9._\\-])*)", "\\\\0", $html);

return $html;
}

как-то так...
Название: Рег выражения и выделение ссылок
Отправлено: koder от 23 Октября 2006, 16:41:21
И тогда если сделать
echo addlinks(" text text http://s.ru text
 text");
то получится не совсем то что нужно!
Название: Рег выражения и выделение ссылок
Отправлено: koder от 24 Октября 2006, 12:04:37
хм. неужели никто такого не писал? полезная вещь же..
Название: Рег выражения и выделение ссылок
Отправлено: brainkiller от 24 Октября 2006, 16:21:32
Во-первых, посмотрите на исходные условия - там об этом ничего не было.

Во-вторых, самостоятельно прикрутить strip_tags() в нужном месте религия запрещает?
Название: Рег выражения и выделение ссылок
Отправлено: koder от 24 Октября 2006, 18:36:48
Цитировать
Во-первых, посмотрите на исходные условия - там об этом ничего не было.

разве?
Цитировать
Но также нужно учесть что ссылока уже может быть выделеной, тогда повторное выделение очень не желательное!!!



Цитировать
Во-вторых, самостоятельно прикрутить strip_tags() в нужном месте религия запрещает?

тоесть в нужном месте? Смотри, у меня есть большой кусок текста в HTML формате. Там есть ссылки уже выделеные в а есть не выделеные. strip_tags() ко всему - не вариант. А вот как это применить к нужному куску?
Название: Рег выражения и выделение ссылок
Отправлено: brainkiller от 25 Октября 2006, 15:24:00
Согласен, насчет условий промахнулся! :)

Внимательно следим за руками:

"http://(([A-Za-z0-9._\\-])*)"

меняем на

" http://(([A-Za-z0-9._\\-])*) "

т.е. обрамляем выражение пробелами, и - о, чудо! - все работает!
Название: Рег выражения и выделение ссылок
Отправлено: koder от 25 Октября 2006, 19:33:11
хм. а это и правда хороший вариант!
Название: Рег выражения и выделение ссылок
Отправлено: brainkiller от 28 Октября 2006, 19:09:13
Да, совсем забыл: еще нужно в выражение добавить слэш, амперсанд, диез, знак процента и вопросительный знак.