ジョブに不適切なツール
正規表現を修正しようとしている他のすべての回答は、間違った正規表現の別の部分に関するものです。これは、それが仕事に適したツールではないことを示しているはずです。
正規表現が短くてコンパクトな場合、正規表現を正しく理解するのは困難です。この長さの 1 つを正しく理解するのは悪夢であり、不可解な方法で壊れることを恐れて、将来誰もそれに触れることができなくなります。
慣用的なJava
SimpleDateFormat.parse()
String
Javaでフォーマットされた日付情報を処理する慣用的な方法です。
正規表現はマッチング用
問題に直面したときに、「分かった、正規表現を使用する」と考える人もいます。現在、彼らには 2 つの問題があります - Jamie Zawinski
そして、その引用はalt.religion.emacs
メーリングリストからのものです!
SimpleDateFormat.parse()
なぜ正しいことをするのかを説明するための不十分な解決策。
いずれにせよ、正規表現で必要なものを一致させることはできますが、実行しようとしているすべての検証を行うべきではありません。検証ロジックと一致するロジックを混同しています。2つは一部の領域で重複しているように見えますが、この場合、検証は正規表現テストではなくコードである必要があります。
(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday), (January|February|March|April|May|June|July|August|September|October|November|December) (\d{2}), (\d{4}) (\d{1,2}):(\d{2}):(\d{2})\.(\d{3}) (AM|PM)
上記の式は、タイトルで要求された文字列と一致します。しかし、数値の範囲を検証しようとはしません。検証した場合、うるう年と 2 月についてどうするつもりですか? 、正規表現は維持するのがさらに悪くなります。
このような場合、正規表現を使用してデータのトリアージを行い、パターンまたはフォーマットに一致することを確認してから、それを実際のパーサーに渡すか、グループを実際に範囲検証を行うメソッドに渡す必要があります。他のもの。