我正在练习解析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>
我该怎么办?
谢谢。
答案 0 :(得分:2)
模式<[^/^>.]+>[^<^>.]+</[^>.]+>
表示:
<
/
^
>
和.
>
<
^
>
.
</
>
.
>
所以它不匹配<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
答案 1 :(得分:0)
如果您希望正则字符中具有特殊含义的点或其他字符是普通字符,则必须使用反斜杠将其转义。由于Java中的正则表达式是普通的Java字符串,因此您需要转义反斜杠本身,因此需要两个反斜杠,例如: \\.