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