Как использовать Android REGEX с классами Pattern и Matcher? - PullRequest
4 голосов
/ 06 марта 2012

У меня есть следующий код:

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!");

Почему всегда выдается «ШАБЛОН НЕ СООТВЕТСТВУЕТ?»

Ответы [ 3 ]

6 голосов
/ 06 марта 2012

По умолчанию.не соответствует разрывам строк.Вам нужно было бы добавить параметр регулярного выражения, чтобы он:

Pattern p = Pattern.compile(myPattern,Pattern.DOTALL);
3 голосов
/ 06 марта 2012

m.matches () вернет true, только если вся строка совпадает. Вместо этого используйте m.find (), и он должен работать лучше!

1 голос
/ 06 марта 2012

Во-первых, как сказала дуга,.не будет соответствовать \ n, если вы не активируете Pattern.DOTALL, и в качестве Petter M вы должны использовать m.find (), иначе это не будет соответствовать.

Затем вы можете использовать это другое выражение, если по какой-либо причине вы не можете работать с Pattern.DOTALL.

FILES_SECTION (?:. | \ s) * FILES_SECTION

(обратите внимание, я использую группу без захвата длясимволы между разделителями FILES_SECTION).

...