Я пытаюсь сделать что-то очень похожее . Я рекомендую избегать regEx, как чума. Это никогда не так просто, как кажется, и эти угловые случаи вызовут кошмары.
Сейчас я склоняюсь к Пользовательским тегам Библиотека , упомянутым в этом посте Одной из лучших функций является поддержка скрытых или вложенных тегов, таких как блок кода ниже:
<ct:upper type="all">
This text is transformed by the custom tag.<br />
Using the default example all the characters should be made into uppercase characters.<br />
Try changing the type attribute to 'ucwords' or 'ucfirst'.<br />
<br />
<ct:lower>
<strong>ct:lower</strong><br />
THIS IS LOWERCASE TEXT TRANSFORMED BY THE ct:lower CUSTOM TAG even though it's inside the ct:upper tag.<br />
<BR />
</ct:lower>
</ct:upper>
Я настоятельно рекомендую скачать zip-файл и просмотреть примеры, которые в нем содержатся.