此正则表达式不适用于xml中的CDATA。我该如何解决?

时间:2013-04-11 04:04:48

标签: java xml regex

我正在使用外部API,我们只允许我使用正则表达式,我想解析像<name>alwin</name>这样的xml标记中的内容,并使用<.*?>.*?<.*/>来解析“alwin”..它不会不行,但现在它的结构类似<name><![CDATA[<table>alwin</table>]]</name>,我希望能够解析CDATA ..我也想提取[![CDATA[<table>alwin</table]]。而且只是“alwin”。

1 个答案:

答案 0 :(得分:0)

请尝试使用此模式:

<([a-zA-Z]+).*?>(.*?)</\1>

\1子句指向模式的第一个匹配组,即([a-zA-Z]+)。因此,匹配的结束标记将始终与开始标记相同。

然后标签的内容将在第二组中提供:

Pattern p = Pattern.compile("<([a-zA-Z]+).*?>(.*?)</\\1>");
Matcher m = p.matcher("<name><![CDATA[<table>alwin</table>]]</name>");
while (m.find()) {
    System.out.println(m.group(2));
}

以上代码段打印:

<![CDATA[<table>alwin</table>]]

重申上面输出的模式以获得alwin部分。