REGEX: добавление ссылок в текст HTML - PullRequest
1 голос
/ 22 июня 2011

У меня есть загадка, требующая вашей помощи: мне нужно заменить некоторые слова ссылками в тексте HTML.

For example, I have to replace "word" with "<a href="...">word</ a>"

Сложность двойная:

  • 1.не добавлять ссылки в атрибуты тега
  • 2.не добавлять ссылки другие ссылки (вложенные ссылки).

Я нашел решение для случая (1), но не могу справиться с делом (2).

Вотмой упрощенный код:

String text="sample text <a>sample text</a> sample <a href='http://www.sample.com'>a good sample</a>";
String wordToReplace="sample";
String pattern="\\b"+wordToReplace+"\\b(?![^<>]*+>)"; //the last part is here to solve de problem (1)
String link="["+wordToReplace+"]"; //for more clarity, the generated link is replaced by [...]

System.out.println(text.replaceAll(pattern,link));

Результат:

[sample] text <a>[sample] text</a> [sample] <a href='http://www.sample.com'>a good [sample]</a>

Проблема: есть ссылка в другой ссылке.

У вас есть идея, какрешить эту проблему?

Заранее спасибо

1 Ответ

1 голос
/ 22 июня 2011

Парсинг HTML с помощью регулярных выражений всегда плохая идея, именно из-за таких странных случаев, как этот. Было бы лучше использовать анализатор HTML. Java имеет встроенный HTML-парсер с , использующим Swing , который вы, возможно, захотите изучить.

...