Автор Тема: Рег выражения и выделение ссылок  (Прочитано 4473 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн koder

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Рег выражения и выделение ссылок
« : 23 Октября 2006, 02:19:12 »
Цель - выделить в тексте ссылки.
Тоесть из http://s.ru сделать http://s.ru\'>http://s.ru
Но также нужно учесть что ссылока уже может быть выделеной, тогда повторное выделение очень не желательное!!!

Вот что написал: (точнее взял тут - советую глянуть )
function addlinks($html)
{
$substring = \'http\\S+\';
$replacement = \'<a target=_blank href=$2>$2</a>\';
$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

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 527
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Рег выражения и выделение ссылок
« Ответ #1 : 23 Октября 2006, 16:19:02 »
function addlinks($html)
{
$html = eregi_replace("http://(([A-Za-z0-9._\\-])*)", "\\\\0", $html);

return $html;
}

как-то так...

Оффлайн koder

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Рег выражения и выделение ссылок
« Ответ #2 : 23 Октября 2006, 16:41:21 »
И тогда если сделать
echo addlinks(" text text <a href=http://s.ru>http://s.ru</a> text 
 text"
);

то получится не совсем то что нужно!

Оффлайн koder

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Рег выражения и выделение ссылок
« Ответ #3 : 24 Октября 2006, 12:04:37 »
хм. неужели никто такого не писал? полезная вещь же..

Оффлайн brainkiller

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 527
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Рег выражения и выделение ссылок
« Ответ #4 : 24 Октября 2006, 16:21:32 »
Во-первых, посмотрите на исходные условия - там об этом ничего не было.

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

Оффлайн koder

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Рег выражения и выделение ссылок
« Ответ #5 : 24 Октября 2006, 18:36:48 »
Цитировать
Во-первых, посмотрите на исходные условия - там об этом ничего не было.

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



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

тоесть в нужном месте? Смотри, у меня есть большой кусок текста в HTML формате. Там есть ссылки уже выделеные в а есть не выделеные. strip_tags() ко всему - не вариант. А вот как это применить к нужному куску?

Оффлайн brainkiller

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 527
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Рег выражения и выделение ссылок
« Ответ #6 : 25 Октября 2006, 15:24:00 »
Согласен, насчет условий промахнулся! :)

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

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

меняем на

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

т.е. обрамляем выражение пробелами, и - о, чудо! - все работает!

Оффлайн koder

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Рег выражения и выделение ссылок
« Ответ #7 : 25 Октября 2006, 19:33:11 »
хм. а это и правда хороший вариант!

Оффлайн brainkiller

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 527
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Рег выражения и выделение ссылок
« Ответ #8 : 28 Октября 2006, 19:09:13 »
Да, совсем забыл: еще нужно в выражение добавить слэш, амперсанд, диез, знак процента и вопросительный знак.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28