我正在尝试从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正则表达式解决方案。提前谢谢!
答案 0 :(得分:1)
也许您想要这样的东西 - 它将替换任何标签(即'&lt;&gt;'),无论标签的属性或雪佛龙内容如何,无论您想要称之为什么
String tagful = "Hello <fizz>buzz</fizz>Regexes!";
String tagless = tagful.replaceAll("<[^>]*>", "");
//tagless = tagless.replaceAll("<*/*>", "");
System.err.println("TAGLESS:\n\t" + tagless);
答案 1 :(得分:1)
您需要将*
更改为.*?
。尝试使用"<.*?>.*?</.*?>"
和"<.*?/>"
。
或者只是"<.*?>.*?</.*?>|<.*?/>"
*
表示之前的元素可以出现0次或更多次。 .
表示“新线条旁边的任何内容”。 因此<.*>
将接受<
和>
之间的任何内容。
但是在这种形式下.*
是贪婪的,而"<abc>def<ghi>"
中的字符串将匹配"abc>def<ghi"
部分。
要使其与最小设置匹配,我们需要在?
之后使用*
。
答案 2 :(得分:0)
你也可以尝试这个..
String tagful = "Hello <fizz>buzz</fizz>Regexes!";
String tagless = tagful.replaceAll("\\<.*?\\>", "");
System.out.println("TAGLESS:\n\t" + tagless);