Замена ключевого слова в строке, которая является HTML-страницей, с использованием Java - PullRequest
0 голосов
/ 22 января 2011

У меня есть следующая строка:

<html>
<head><meta>...</meta><head>
<body>
   <div id="foo">
     Text I want to search & replace occurrences
     of keywords such as Foo or foo while ignoring case
   </div>
</body>
</html>

То, что я хочу закончить, это:

<html>
<head><meta>...</meta><head>
<body>
   <div id="foo">
     Text I want to search & replace occurrences
     of keywords such as <b>Foo</b> or <b>foo</b> while ignoring case
   </div>
</body>
</html>

Так что мне бы очень хотелось найти и заменить foo на <b>foo</b> или <b>Foo</b>. Важно сохранить регистр заменяемой строки, но сопоставить ее с ключевым словом foo, игнорируя регистр совпадений.

Еще одна важная вещь: замена игнорирует все HTML-теги и их содержимое. Обратите внимание, что <div id="foo"> остается таким, как есть.

Я написал это, но еще не тестировал

 text = text.replace("(?i)"+keyword+"(?!([^<]+)?>)", "<b>"+keyword+"</b>");

Проблема с вышесказанным заключается в том, что он не запоминает случай замены слова и просто вставляет ключевое слово.

Ответы [ 3 ]

2 голосов
/ 22 января 2011
text.replaceAll("(?i)(" + keyword + ")(?!([^<]+)?>)", "<b>$1</b>")
1 голос
/ 22 января 2011

Вам нужно использовать группу захвата , и, кстати, использовать replaceAll

text = text.replaceAll("(?i)("+keyword+")(?!([^<]+)?>)", "<b>$0</b>");
0 голосов
/ 15 октября 2016

Должно быть так, т.е. должна быть установлена ​​граница слова:

text.replaceAll("(?i)(\\b" + keyword + "\\b)(?!([^<]+)?>)", "<b>$1</b>")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...