替换<的所有实例和>但不是他们之间的文字

时间:2013-09-08 03:52:30

标签: java regex

如何在标签之间提取文字?

在标签之间获取文本,下面的代码工作正常,

System.out.println("<text>google<text/>".replaceAll("<[^>]*>", "")); // gives google

我正在为&lt;&gt;尝试相同的操作。我错过了以下代码的任何内容吗?

System.out.println("&lt;aksdk&gt;google&lt;aksdk&gt;".replaceAll("&lt;[^.]*&gt;", "")); 

PS:我没有将它用于html解析。

2 个答案:

答案 0 :(得分:3)

您需要使用括号来捕捉尖括号之间的内容,并通过在替换字符串中使用$1引用组1来将其放回去:

"&lt;aksdk&gt;google&lt;aksdk&gt;".replaceAll("&lt;([^.]*?)&gt;", "$1")

重要说明:使用[^.]*?(而不是[^.]*),因为[^.]*? 非贪婪,这意味着它不会跳过第一个&gt;并与上一个&gt;匹配,这将使第一个&gt;和第二个&lt;保持完整 - 而不是您想要的。

答案 1 :(得分:1)

您在[^.]中接受了太多字符,因此您将第一个标记的开头与第二个标记的结尾相匹配,并删除整个字符串。试试[^&]

System.out.println("&lt;aksdk&gt;google&lt;aksdk&gt;".replaceAll("&lt;[^&]*&gt;", ""));