为什么string.matches和pattern.matches得到不同的结果?

时间:2012-06-30 11:19:45

标签: android


// pattern 20xx/xx/xx, e.g. 2012/2/22
String Regex_Date_1 = "20\\d\\d/\\d{1,2}/\\d{1,2}";

String cell = "from 2011/7/31 to 2011/8/15 15:10-17:40,18:30-21:00";
System.out.println(cell);

System.out.println("--- a ---");
System.out.println( cell.matches(Regex_Date_1) );

System.out.println("--- b ---");
Pattern p = Pattern.compile(Regex_Date_1);
Matcher m = p.matcher(cell);
while(m.find()){
    System.out.println( m.group(0) );
}

结果:


from 2011/7/31 to 2011/8/15 15:10-17:40,18:30-21:00
--- a ---
false
--- b ---
2011/7/31
2011/8/15

为什么string.matches返回false?但是pattern.matches可以获得匹配吗?

2 个答案:

答案 0 :(得分:0)

因为String#matches将返回true“当且仅当此字符串与给定的正则表达式匹配时”。您可以在此处查看文档:{​​{3}}

但是Matcher#find将返回true“,当且仅当输入序列的子序列与此匹配器的模式匹配时”。文档可在此处获取:String#matches

总而言之 - 如果整个字符串与正则表达式匹配,则String#matches返回true,如果字符串的某些子序列可以与正则表达式匹配,则Matcher#find返回true。

答案 1 :(得分:0)

Becucase

Regex_Date_1 =“20 \ d \ d / \ d {1,2} / \ d {1,2}”;

matches (String regularExpression)

只有当正则表达式匹配整个输入字符串时,他的方法才返回true。 A common mistake is to assume that this method behaves like contains(CharSequence); if you want to match anywhere within the input string, you need to add .*到正则表达式的开头和结尾。