Java 如何将Android正则表达式与模式和匹配器类一起使用?

Java 如何将Android正则表达式与模式和匹配器类一起使用?,java,android,regex,matcher,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.*?"

我有以下代码:

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!");
String-example=”“;
字符串myPattern=“.*FILES\u SECTION.*?\n(.*?)\n.*FILES\u SECTION.*?”;
Pattern p=Pattern.compile(myPattern);
匹配器m=p.Matcher(示例);
如果(m.matches())
Log.d(“匹配器”,“模式匹配!”);
其他的
Log.d(“匹配器”,“模式不匹配!”);

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

m。matches()仅在整个字符串匹配时返回true。改为使用m.find(),它应该工作得更好

默认情况下。不匹配换行符。您需要添加一个regex选项,以便:

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

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

然后,如果由于任何原因无法使用Pattern.DOTALL,则可以使用另一个表达式

文件部分(?:.|\s)*文件部分


(注意,我对文件之间的字符使用非捕获组。\u节分隔符)。

但是整个字符串不应该与正则表达式匹配吗?我想应该是的!无论如何,我已经尝试使用了一段时间(m.find),它甚至没有循环一次,所以我认为这是一个不同的问题!也许我有点不清楚。matches()隐式地在模式的开头和结尾添加“^”和“$”,因此字符串将不匹配,因为它以“”开头。也许find()和arc的解决方案的组合会起作用?编辑:对不起,我看错了你的图案。就像Caner说的,这看起来有点错误。你的模式甚至不接近你想要的。我建议您在之前了解更多关于regex的信息:谢谢您提供的详细信息:-)另外,您可以使用表达式搭配matches()启用Pattern.DOTALL并删除所有?表达式中的字符。还记得吗?匹配0到1次之间的a,a*匹配0到n次之间的a。。。那么写一些像*的东西?这有点无意义。这样,您自己的表达式可以简化为:“.*FILES\u SECTION.*FILES\u SECTION.*”,只要您使用Pattern.DOTALL。无论如何,我认为这个表达可能太宽泛了另一种避免DOTALL的方法是使用以下字符类:[\d\d]+,该字符类将匹配任何数字或非数字。。有什么事吗