正则表达式删除一些HTML标记但保留Span标记

时间:2013-10-30 13:10:20

标签: java html regex

是否有表达式可以获取两个HTML标记之间的值?如果Span标签在那里,那么我需要保持原样

input
<table><tr>
<td>abc<td/> <span class="abc">Test</span>
</tr>
</table>

Output

abc <span class"abc"> Test</span>

我尝试了以下解决方案,但它也删除了标签

String input="<table><tr><td>abc<td/> <span>Test</span></tr></table>";
        String newValue = input.replaceAll("<[^>]*>", "");
        System.out.println(newValue);

输出上述代码

abc Test

但输出需要

abc <span class"abc"> Test</span>

2 个答案:

答案 0 :(得分:2)

您可以使用否定前瞻(?!...),这意味着后面没有来测试标记。用java语法编写:

<(?!/?span\\b)[^>]*>

答案 1 :(得分:1)

我认为这可以满足您的需求:

str.replaceAll("<(?!\\/?span)[^>]+>", "")

这将查找<,然后在前往下一个/span之前向前看它是否包含span> ...并替换所有没有任何东西。

Example

String str = "<table><tr><td>abc<td/> <span class=\"abc\">Test</span></tr></table>\";";
System.out.println(str.replaceAll("<(?!\\/?span)[^>]+>", ""));
//prints: abc <span class="abc">Test</span>";