4

我有以下代码:

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”?

4

3 回答 3

6

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

Pattern p = Pattern.compile(myPattern,Pattern.DOTALL);
于 2012-03-06T14:46:54.987 回答
3

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

于 2012-03-06T14:45:38.980 回答
1

首先,正如弧所说,. 除非您激活 Pattern.DOTALL,否则不会匹配到 \n,并且作为 Petter M,您应该使用 m.find(),否则它将不匹配。

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

FILES_SECTION(?:.|\s)*FILES_SECTION

(注意我对 FILES_SECTION 分隔符之间的字符使用了非捕获组)。

于 2012-03-06T14:59:46.737 回答