#java #mapping
#java #сопоставление
Вопрос:
У меня есть строка, которая содержит этот HTML-код:
abc <h1><div style="color: rgb(190, 6, 6);">ABC <span style="color: rgb(0, 255, 6);">DEF</span></div></h1>
Моя программа должна определить, что color
было использовано, чтобы она автоматически добавляла элемент ( div
и span
) каждый в новый элемент font
. Это должно работать, даже если есть несколько элементов, каждый из которых содержит color
правило, в строке, где слева или справа добавлены другие HTML-элементы.
Как я мог это сделать?
Приведенный выше код станет:
abc <h1><font color="rgb(190, 6, 6)"><div style="color: rgb(190, 6, 6);">ABC <font color="rgb(0, 255, 6);"><span style="color: rgb(0, 255, 6);">DEF</span></font></div></font></h1>
Комментарии:
1. Что вы пробовали до сих пор? Вы пробовали использовать регулярное выражение для поиска и замены?
2. Привет, Хари, я думал, что смогу обнаружить первое «<«, появляющееся перед словом «color», которого нет между двойными кавычками. Таким образом, я смогу идентифицировать открывающий тег. Для html-элементов без конечного тега этого было бы достаточно. Но для элементов htm с начальными и конечными тегами это не так. То, что я хочу сделать, кажется довольно сложным. Я думал, что есть какой-то API или другой.
Ответ №1:
Используйте это регулярное выражение для поиска и замены
pattern = "(<div[s] style=")(color:[s] rgb([d] , [d] , [d] ))"
replace by "<font color="$2">$1"$2"
Это работает для div. Аналогично вы можете сделать это для span
Комментарии:
1. Принимаете ли вы во внимание конечный тег, связанный с этим открывающим? Возможно, я ошибаюсь, но я этого не вижу.
2. Я не учел конечный тег. конечно, чтобы сделать его более точным, вы можете добавить это также
3. Но чтобы учесть конечный тег, нужно позаботиться о содержимом элемента, и использование только регулярных выражений не решит эту проблему.
4. Кстати, я пробую JSoup. Я думаю, это решит проблему эффективнее, чем все, что мы могли бы изобрести :). Я опубликую свой ответ, если то, что я пытаюсь сделать, сработает.