0

// 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 可以得到匹配?

4

2 回答 2

0

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

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

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

于 2012-06-30T11:24:47.107 回答
0

贝库卡斯

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

匹配(字符串正则表达式)

仅当正则表达式匹配整个输入字符串时,他的方法才返回 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 .*到正则表达式的开头和结尾。

于 2012-06-30T11:28:51.140 回答