我的xml字符串是:
String neMsg= "<root>"
+" <CONTENT>"
+" <![CDATA[00000:<ResponseClass Name=\"Response\"><ITEM>HAHA</ITEM></ResponseClass>]]>"
+" </CONTENT>"
+"</root>";
我尝试使用四种方式编写代码,但仍然无法获取内容。我该如何解决这个问题?
//java.util.regex.Pattern pP0=java.util.regex.Pattern.compile("<!\\[CDATA\\[00000:(\\s|\\S)*?\\]\\]>");
// java.util.regex.Pattern pP0=java.util.regex.Pattern.compile("<!\\[CDATA\\[00000:(.*)\\]\\]>");
// java.util.regex.Pattern pP0=java.util.regex.Pattern.compile("<CONTENT>(.*)<!\\[CDATA\\[(.*)\\]\\]>(.*)</CONTENT>");
Pattern pP0 = Pattern.compile(".*<!\\[CDATA\\[00000:(.*)\\]\\]>.*");
java.util.regex.Matcher mP0= pP0.matcher(neMsg);
System.out.println(mP0.group(1));
答案 0 :(得分:2)
请勿使用正则表达式解析HTML,而应使用 JSoup 之类的HTML解析器。
这里的问题是,您需要先调用matcherObject.find()
(用它来在字符串中的任何地方查找模式)或matcherObject.matches()
(用它来将整个字符串与模式匹配)方法,您可以访问匹配,并且还应该首先使用find
或matches
循环来检查if
或while
表示的值是否正确。另外,您需要调用group(1)
而不是group(0)
(这将返回整个匹配项)来访问group1中的内容。
将代码更改为此,
String neMsg = "<root>" + " <CONTENT>"
+ " <![CDATA[00000:<ResponseClass Name=\"Response\"><ITEM>HAHA</ITEM></ResponseClass>]]>"
+ " </CONTENT>" + "</root>";
Pattern pP0 = Pattern.compile(".*<!\\[CDATA\\[00000:(.*)\\]\\]>.*");
java.util.regex.Matcher mP0 = pP0.matcher(neMsg);
if (mP0.find()) { // matches method will also work because your pattern is wrapped with `.*` from both sides
System.out.println(mP0.group(1));
}
打印整个比赛,
<ResponseClass Name="Response"><ITEM>HAHA</ITEM></ResponseClass>