Окружите HTML парой открывающих и закрывающих тегов с комментариями

Мне нужно написать замену регулярных выражений Java (желательно чисто декларативную), которая будет выполнять эти аналогичные преобразования:

1)

<a nonStandardAttrName="">Some visible text</a>

to

<span class="invalid"><a nonStandardAttrName=""></span>
Some visible text
<span class="invalid"></a></span>

и

2)

<b nonStandardAttrName="">Some visible text</a>

to

<span class="invalid"><b nonStandardAttrName=""></span>
Some visible text
<span class="invalid"></b></span>

3) и т.д. (т.е. тег может быть a, b, foobar - любым)

(пожалуйста, не предлагайте другой подход — на самом деле приложение использует диапазоны, а не комментарии, но я должен использовать этот подход «подавить, окружив теги», который не является моим дизайнерским решением)

Можно ли это сделать с помощью регулярных выражений? Сопоставить открывающий тег легко, потому что я могу сопоставить подстроку nonStandardAttrName, но как мне найти закрывающий тег? Есть ли какая-то операция с регулярным выражением, которая говорит: «Что бы я ни захватил ранее, поищите это позже»? Если бы теги были каким-то конечным набором, я мог бы жестко закодировать имена этих тегов в регулярном выражении, но в моей ситуации теги могут быть множеством нестандартных тегов. Самое близкое, что я знаю, это замена обратных ссылок, но это только для вывода, а не для ввода.

Что я пытаюсь сделать

Это действительно не имеет значения, но мой анализатор HTML отбрасывает разметку, которая не является стандартной HTML. Но мне нужно сохранить любой необычный ввод, который дал мне пользователь. Поэтому мне нужно избежать его перед синтаксическим анализом и отключить после синтаксического анализа (используя комментарии или интервалы).


person Sridhar Sarnobat    schedule 27.11.2014    source источник
comment
если ‹a› является рекурсивным, у вас возникнут трудности   -  person MeBigFatGuy    schedule 27.11.2014
comment
Да. Я либо отключу преобразование, либо рекурсивно применю преобразование к внутреннему HTML (что сделает его программным, а не чисто декларативным).   -  person Sridhar Sarnobat    schedule 27.11.2014


Ответы (1)


На самом деле это легко. Вы можете поместить обратные ссылки во входное выражение. Обратные ссылки не ограничиваются выходными выражениями подстановки.

person Sridhar Sarnobat    schedule 01.12.2014