次の文字列が[datetime:yyyyMMddhhmmss]
あり、正規表現でチェックしたいと思います。複数の正規表現の一致でそれを実行できることはわかっていますが、可能であれば 1 つの式で実行したいと考えています。文字列には、 so のようにダッシュ/ハイフンとアンダースコアを含めることもできます[datetime:yyyy_MM_dd_hh-mm-ss]
。スペースは、コードを先頭にして削除されます。また、日時指定子グループ (yyyy のようなグループ) は、 after[datetime:
と beforeの形式のどこかに置くことができます]
。したがって、これも有効な形式になります。[datetime:dd_MM_yyyy_hh-mm-ss]
確認事項:
- [datetime:] が存在することを確認したい。パターン使えます
\[datetime:[\w\-]+\]
- yyyy MM dd hh mm ss の 6 つのグループが存在することを確認したいのですが、順序がランダムである可能性があります。
\[datetime:[\w\-]+(?<=.?M{2}.?)\]
コードのどこかにあるMMの存在と一致するように、正の先読み/後読みでそれをやろうとしていました。しかし、これはうまくいきません。
私を助けることができる正規表現の第一人者はいますか?
解決:
Bergi の回答に基づいて、この正規表現パターン\[datetime:(?=.*?y{4})(?=.*?M{2})(?=.*?d{2})(?=.*?h{2})(?=.*?m{2})(?=.*?s{2})[\w\-]+\]
ができました。これで問題ありません。以下のすべてのパターンに一致するため:
- [日時:yyyyMMddhhmmss]
- [日時:mmssyyyyddMMhh]
- [日時:mm_ss-yyyy_dd-MM-hh]
- [日時:mmssyyyyddMM_hours_hh]
上記のパターンのすべてが理にかなっているわけではありませんが、これはまさに私が探していたものです!