我有以下代码:
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?”
答案 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分隔符之间的字符。)