0

我正在尝试从 Java 字符串中删除任何 XML 标记。在我看来,如果它遵循以下一种或两种形式,那么它就是一个 XML 标记:

  • <*>*<*/*>, 如<fizz>buzz< /fizz>; 或者
  • <*/*>, 如< fizz />

我的正则表达式很简单:

String tagful = "Hello <fizz>buzz</fizz>Regexes!";
String tagless = tagful.replaceAll("<*>*<*/*>", "");
tagless = tagless.replaceAll("<*/*>", "");
System.err.println("TAGLESS:\n\t" + tagless);

当我运行它时,我得到Hello <fizzbuzz</fizzRegexes!了输出,而(如果我的 XML 剥离代码是正确的),我应该得到Hello Regexes!. 我会误入歧途吗?

请注意:我不想使用任何现有的库;我在这里寻找一个纯 Java 正则表达式解决方案。提前致谢!

4

3 回答 3

1

也许你想要这样的东西 - 它会替换任何标签(即'<>'),无论标签的属性或人字形内容如何,​​无论你想怎么称呼它

String tagful = "Hello <fizz>buzz</fizz>Regexes!";
String tagless = tagful.replaceAll("<[^>]*>", "");
//tagless = tagless.replaceAll("<*/*>", "");
System.err.println("TAGLESS:\n\t" + tagless);
于 2013-03-19T17:37:49.953 回答
1

您需要将您的更改*.*?. 尝试使用"<.*?>.*?</.*?>""<.*?/>"
要不就 "<.*?>.*?</.*?>|<.*?/>"

  • *表示该元素之前可以出现 0 次或更多次。
  • .意思是“新行标记之外的任何东西”。

所以<.*>会接受 和 之间<的任何东西>

但是这种形式.*是贪婪的,并且在 String 中"<abc>def<ghi>"会匹配"abc>def<ghi"部分。

为了使它匹配最小集合,我们需要使用?after *

于 2013-03-19T17:38:11.080 回答
0

你也可以试试这个。。

String tagful = "Hello <fizz>buzz</fizz>Regexes!";
String tagless = tagful.replaceAll("\\<.*?\\>", "");
System.out.println("TAGLESS:\n\t" + tagless);
于 2013-03-19T17:45:42.410 回答