Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Помогите разобраться с регулярным выражением


Автор: jackson1986 21.4.2013, 15:23
Всем привет.

Задача: В тексте все ссылки (подстроки начинающиеся с "http:", "https:" и заканчивающиеся пробелами или символами табуляции)
необхдимо завернуть в тег <a href="ссылка">ссылка</a>, при этом заворачивать нужно такие ссылки которые уже не являются значяением
аттрибута href (href="ссылка" оставить без изменений)

Решение:

Код

String src = "sdfsdf<a title=\"fff\" href=\"http:\\www.a1.ru\"> dggf <p> http:\\www.a2.ru </p>sdfsd<p>http:\\www.a3.ru</p>";
return src.replaceAll("(\\A|\\s)((http|https|ftp|mailto):\\S+)(\\s|\\z)", "$1<a href=\"$2\">$2</a>$4");




Проблема:Результат получается в этом примере

sdfsdf<a title="fff" href="http:\www.a1.ru"> dggf <p> <a href="http:\www.a2.ru">http:\www.a2.ru</a> </p>sdfsd<p>http:\www.a3.ru</p>

Т.е нормально завернулась только ссылка www.a2.ru, а www.a3.ru не была обработана (потому что нет пробелов между ней и тегами).
Подскажите пожалуйста, как можно изменить регулярное выражение, чтоб вот эта ссылка <p>http:\\www.a3.ru</p> тоже обрабатывалась ?

Вот такое изменение "(\\A|\\s|>)((http|https|ftp|mailto):\\S+)(\\s|\\z)" помогло частично — последняя ссылка стала обрабатываться
как <a href="http:\\www.a3.ru</p>">http:\\www.a3.ru</p></a> т.е. последний тег </p> тоже попадает. Я так понимаю, тут все дело в \S+ который гребет все символы, кроме пробела, но как сделать, чтоб он брал все символы до пробела или символа "<" ?

Заранее большое спасибо

Автор: Stolzen 21.4.2013, 17:28
Попробуйте "\S+?"

Автор: jackson1986 22.4.2013, 08:44
Спасибо, но все равно не работает.

Вот http://javatalks.ru/posts/186691 решение помогло


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)