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 に答える