3

こんにちは、これまで助けてくれてありがとう。特定の文字列で日付を見つけるための正規表現がありますが、機能していないようです。誰かが私が間違っていることを教えてもらえますか? コードは次のようになります

Pattern pattern = Pattern.compile("^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\\d\\d(?:,)$");
Matcher match = pattern.matcher(text1);

List<String> removable1 = new ArrayList<String>();             
while(match.find()) {
    removable1.add(match.group());
}

文字列 text1 に「2013 年 7 月 2 日」という日付が含まれていることはわかっていますが、これはリスト remove1 に書き込まれていません。事前に感謝します。

4

3 に答える 3

2

あなたのパターンでは、1 桁の日と月は許可されていません。先頭を0オプションにします。

^(0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012])[- /.](19|20)\\d\\d(?:,)$

また、末尾のコンマが何をするのかわかりません。さらに、「文字列に含まれる」と言いますが、パターンを開始と終了^$固定します。したがって、日付を見つけたい場合は、これらを削除することをお勧めします。

(0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012])[- /.](19|20)\\d\\d

最後に、両方の日付区切り記号が同じ文字であることを確認したい場合は、次のようにします。

(0?[1-9]|[12][0-9]|3[01])([- /.])(0?[1-9]|1[012])\\2(19|20)\\d\\d

最後に、いくつかの最適化のために、必要のない場所をキャプチャしないようにします (そして、世紀をオプションにする可能性があります:

(?:0?[1-9]|[12][0-9]|3[01])([- /.])(?:0?[1-9]|1[012])\\1(?:19|20)?\\d\\d
于 2013-08-05T10:34:22.073 に答える
1

これを試して

String text1="07/02/2013";
Pattern pattern = Pattern.compile("^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\\d\\d$");
于 2013-08-05T10:36:43.957 に答える