2015-09-14 4 views
1

Я хочу заменить каждый тег <img> закрытием <img></img> теги в строке. Строка на самом деле HTML документ, в котором IMG тег генерируется мной и всегда выглядеть следующим образом:Замена <img> на <img></img> в строке

<img src="some_source.jpg" style="some style attributes and values"> 

Src является вводом данных пользователя, поэтому он может быть что угодно. Я сделал выражение регулярного выражения, не уверен, правильно ли, потому что это мой первый раз, используя его, но после тестирования он работал. Проблема в том, что я не знаю, как сохранить содержимое src.

/<img\ssrc=".+?"\sstyle=".+?">/g 

Но у меня возникли трудности с заменой тегов в строке.

и все, что я получил это:

Pattern p = Pattern.compile("/<img\\ssrc=\".+?\"\\sstyle=\".+?\">/g"); 
    Matcher m = p.matcher(str); 
    List<String> imgStrArr = new ArrayList<String>(); 
    while (m.find()) { 
     imgStrArr.add(m.group(0)); 
    } 
    Matcher m2 = p.matcher(str); 
+0

замена '' тегов на '' делает плохие вещи хуже. –

+0

@ MarcusMüller Что значит? Я не могу разобрать строку в классе Document, если они не закрываются. Вы спустили вниз? – Ced

+0

почему вы хотите это сделать? '' не является закрывающим тегом, поэтому '' синтаксически ** неправильно **. –

ответ

3

Вы можете использовать следующее регулярное выражение для соответствия:

(<img[^>]+>) 

И заменить $1</img>

Код:

str = str.replaceAll("(<img[^>]+>)", "$1</img>"); 

Edit: Учитывая @ совет MarcusMüller в вы можете сделать следующее:

Regex: (<img[^>]+)>

Заменить $1/>

Код:

str = str.replaceAll("(<img[^>]+)>", "$1/>"); 
+0

Он разрушит файл HTML .. цитируя http://www.w3.org/TR/html-markup/syntax.html#void-element: * Элементы Void имеют только начальный тег; end теги не должны указываться для элементов void. * '' является элементом void. –

+0

@ MarcusMüller теги будут проанализированы браузером. По крайней мере, на хроме я не тестировал других, поскольку это не было очевидно для меня, это может быть причиной ошибок. – Ced

+0

@Ced, это потому, что браузер ** невероятно ** толерантен к недействительному HTML (что '' is) и недопустимому XML (что '' есть, потому что DTD запрещает это). –

1

Вы не должны использовать классы Pattern и Matcher, вы можете использовать обычный метод замены как это:

str = str.replaceAll("(<img.*?>)", "$1</img>"); 

IdeOne working demo

Смежные вопросы