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