我正在练习解析XML。

我的句子是

<SINGER>I.O.I</SINGER> came back on <MONTH>May</MONTH> 4, <YEAR>2016</YEAR>.


我都用过

Pattern.compile("<[^/^>.]+>[^<^>.]+</[^>.]+>");




Pattern.compile("<[^/^>.]+>[^<^>\\..]+</[^>.]+>");


但是,正则表达式不匹配

<SINGER>I.O.I</SINGER>

我认为正则表达式的行为很奇怪,因为这些点可以匹配

<SINGER>I-O-I</SINGER>

我该怎么办?

谢谢。

最佳答案

模式<[^/^>.]+>[^<^>.]+</[^>.]+>表示:


<
一个或多个字符,除了/ ^ >.
>
一个或多个字符,除了< ^ > .
</
一个或多个字符,除了> .
>


因此它与<SINGER>I.O.I</SINGER>不匹配

您可能希望使用<[^>]+>[^<]*</[^>]+>之类的东西作为从XML标记提取数据的快捷方法。

然后,您需要正确使用PatternMatcher

    Pattern p = Pattern.compile("<[^>]+>([^<]*)</[^>]+>");
    Matcher m = p.matcher("<SINGER>I.O.I</SINGER> came back on <MONTH>May</MONTH> 4, <YEAR>2016</YEAR>.");
    while (m.find()) {
        System.out.println(m.group(1));
    }


将打印:

I.O.I
May
2016

08-25 02:37