以下の正規表現の一致を実行して、日付がYYYY_MM_DD形式であるかどうかを確認します。しかし、2012_07_7の値がある場合、正規表現はエラーメッセージを表示します。日付の部分と月は、正規表現のパターンに従って正確に2桁にする必要があります。なぜ機能しないのかわからない。
if ($cmdParams{RunId} !~ m/^\d{4}_\d{2}_\d{2}$/)
{
print "Not a valid date in the format YYYY_MM_DD";
}
正規表現は、日のコンポーネントに正確に 2 桁を指定します。1 桁または 2 桁を許可する場合{1,2}
は、{2}
2012_07_7というデータを見ると、日の部分が 2 桁ではないことがわかります。
明らかに。パターンは、最後の数値チャンクが 2 桁である必要があることを示していますが、1 を提供しています。したがって、パターンをこのテキストと一致させたい場合は、次のようなものを試してください。
if ($cmdParams{RunId} !~ m/^\d{4}_\d{2}_\d\d?$/)
私の解決策:^\d{4}_(?:1[0-2]|0?[1-9])_(?:3[01]|[1-2]\d|0?[1-9])$
このパターン マッチ: 2000_12_01 または 2001_1_1 または 2001_02_1