Javaの正規表現について質問がありますが、これは他の言語にも当てはまると思います。
ユーザーが。のようなものを入力できるフィールドから時間を解析するための正規表現があります4d 8h 42m
。15h
もちろん、ユーザーがすべての数字を入力する必要がないように(たとえば、単なる数字を入力する必要がないように)、できるだけ柔軟にしたいと思います。
私の正規表現は、その点に関して非常に満足のいくものです。(?:([\d]+)d)?[\s]*(?:([\d]+)h)?[\s]*(?:([\d]+)m)?
今の私の問題は、少なくとも1つの時間単位が満たされていることを確認したいのですが、空の文字列にも一致することです。
現在の解決策は、それらの1つを任意に選択して必須にすることですが、必須フィールドは避けようとしているものであるため、私はそれに満足していません。
また、またはを作成することは、後で正規表現を解析するときにグループをテストする必要があるため、group(1)に数日間、group(2)に数時間アクセスするのではなく、...(これは私が思うことですまたはについて話すときの: 、必須の日数または必須の時間または必須の分(?:([\d]+)d[\s]*(?:([\d]+)h)?[\s]*(?:([\d]+)m)?|(?:([\d]+)d)?[\s]*([\d]+)h[\s]*(?:([\d]+)m)?|(?:([\d]+)d)?[\s]*(?:([\d]+)h)?[\s]*([\d]+)m)
として理解されます)。
では、正規表現を変更して、キャプチャしていないグループの少なくとも1つが、数日、数時間、数分であっても空にならないようにするにはどうすればよいでしょうか。