我需要编写一个java正则表达式替换(最好是纯粹的声明),它将执行这些类似的转换:
1)
<a nonStandardAttrName="">Some visible text</a>
到
<span class="invalid"><a nonStandardAttrName=""></span>
Some visible text
<span class="invalid"></a></span>
和
2)
<b nonStandardAttrName="">Some visible text</a>
到
<span class="invalid"><b nonStandardAttrName=""></span>
Some visible text
<span class="invalid"></b></span>
3)等(即标签可以是a
,b
,foobar
- 任何内容)
(请不要提出不同的方法 - 实际上应用程序使用跨度而不是评论但我必须使用这个&#34;通过包围标签来抑制&#34;这不是我的设计决策)
是否可以使用正则表达式执行此操作?匹配开始标记很简单,因为我可以匹配子字符串nonStandardAttrName
,但是如何找到结束标记?是否有某种正则表达式操作表示&#34;无论我之前捕获什么,稍后再次查找&#34;?如果标签是一些有限的集合,我可以在正则表达式中对这些标签名称进行硬编码,但在我的情况下,标签可能是很多非标准标签。我所知道的最接近的是替换反向引用 - 但这只是输出,而不是输入。
我想做的事
它真的不相关,但我的HTML解析器会丢弃不是标准HTML的标记。但我需要保留用户给我的任何古怪输入。所以我需要在解析之前解析它,并在解析之后使用unescape(通过使用注释或跨度)。
答案 0 :(得分:0)
实际上很容易。您可以在输入表达式中添加反向引用。反向引用不仅限于输出替换表达式。