Java正则表达式用于删除XML标记,但不标记内容

我有以下Java代码:

str = str.replaceAll(".*?|", ""); 

这会像这样变成一个String:

 How now brown cow. 

成:

 How now cow. 

但是,我希望它只删除标记,或者只删除独立的</fizz >标记,并保留元素的内容。 那么,正则表达式会将上述内容变为:

 How now brown cow. 

或者,使用更复杂的String,转变为:

 How now brown cow. 

成:

 How now brown cow. 

我试过这个:

 str = str.replaceAll("|", ""); 

这根本不起作用。 有任何想法吗? 提前致谢!

 "How now brown cow.".replaceAll("<[^>]+>", "") 

你快到了;)

尝试这个:

 str = str.replaceAll("<.*?>", "") 

虽然还有其他正确的答案,但没有人给出任何解释。

你的正则表达式<.*?>.*?|<.*?/>不起作用的原因是它会选择任何标签以及它们内部的所有内容 。 您可以在debuggex上看到这一点 。

您的第二次尝试<.*?>|<.*?/>不起作用的原因是它将从标记的开头选择标记后面的第一个关闭标记 。 这有点拗口,但你可以更好地理解这个例子中正在发生的事情。

你需要的正则表达式更简单: <.*?> 。 它只是选择每个标签,忽略它是否打开/关闭。 可视化 。

你也可以试试这个:

 str = str.replaceAll("<.*?>", ""); 

请查看以下示例以便更好地理解:

 public class StringUtils { public static void main(String[] args) { System.out.println(StringUtils.replaceAll("How now brown cow.")); System.out.println(StringUtils.replaceAll("How now brown cow.")); } public static String replaceAll(String strInput) { return strInput.replaceAll("<.*?>", ""); } } 

输出:

 How now brown cow. How now brown cow. 

这不优雅,但很容易遵循。 如果它们一起出现在一行中,则下面的代码将删除开始和结束XML标记

"www.xml.com"<\url> , "This is xml"<\body>

正则表达式:

 to_replace='<\w*>|<\/\w*>',value=""