Вы никогда не должны анализировать HTML с помощью регулярных выражений и вместо этого можете использовать HTML-анализатор, например JSoup .
И проблема здесь в том, что вам нужно сначала вызвать 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>