Java正则表达式点与实际点字符(。)

时间:2017-02-04 09:01:16

标签: java regex

我正在练习解析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>

我该怎么办?

谢谢。

2 个答案:

答案 0 :(得分:2)

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

  1. <
  2. / ^ >.
  3. 以外的一个或多个字符
  4. >
  5. < ^ > .
  6. 以外的一个或多个字符
  7. </
  8. > .
  9. 以外的一个或多个字符
  10. >
  11. 所以它不匹配<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
    

答案 1 :(得分:0)

如果您希望正则字符中具有特殊含义的点或其他字符是普通字符,则必须使用反斜杠将其转义。由于Java中的正则表达式是普通的Java字符串,因此您需要转义反斜杠本身,因此需要两个反斜杠,例如: \\.