我正在练习解析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标记提取数据的快捷方法。
然后,您需要正确使用Pattern
和Matcher
:
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