如何将Android REGEX与模式和匹配器类一起使用?

时间:2012-03-06 14:43:44

标签: java android regex matcher

我有以下代码:

String example = "<!--§FILES_SECTION§\n" +
                "Example line one\n" +
                "Example line two\n" +
                "§FILES_SECTION§-->";

        String myPattern = ".*?FILES_SECTION.*?\n(.*?)\n.*?FILES_SECTION.*?";
        Pattern p = Pattern.compile(myPattern);
        Matcher m = p.matcher(example);

        if ( m.matches() )
            Log.d("Matcher", "PATTERN MATCHES!");
        else
            Log.d("MATCHER", "PATTERN DOES NOT MATCH!");

为什么它总是返回“PATTERN DOES NOT MATCH?”

3 个答案:

答案 0 :(得分:6)

默认情况下,。与换行符不匹配。您需要添加一个正则表达式选项,以便它执行:

Pattern p = Pattern.compile(myPattern,Pattern.DOTALL);

答案 1 :(得分:3)

m.matches()仅在整个字符串匹配时才返回true。请改用m.find(),它应该更好用!

答案 2 :(得分:1)

首先,正如弧所说,。除非你激活Pattern.DOTALL,否则你将使用m.find(),否则它将不匹配。

然后,如果由于任何原因,您无法使用Pattern.DOTALL,则可以使用此其他表达式。

FILES_SECTION(:|?\秒)* FILES_SECTION

(注意我正在使用非捕获组来处理FILES_SECTION分隔符之间的字符。)