ISO 8601表記の継続時間を正規表現で表す
業務でYoutube APIからデータを取得していて、その中で、videoのdurationが必要だったので、調べた所、どうやらISO 8601表記でのものだったので、それの中から、時、分、秒を取得するための正規表現を考えました。
ISO 8601の継続時間
以下で表記されている
P[n]Y[n]M[n]DT[n]H[n]M[n]S
- P は期間を表す指定子(period を表す)であり、継続時間表現の先頭に置かれる。
- Y は年の指定子であり、その後に年を表す数値が続く。
- M は月の指定子であり、その後に月を表す数値が続く。
- W は週の指定子であり、その後に週を表す数値が続く。
- D は日の指定子であり、その後に日を表す数値が続く。
- T 時間の指定子であり、継続時間表現の時間の部分の前に置く。
- H は時間の指定子であり、その後に時間を表す数値が続く。
- M は分の指定子であり、その後に分を表す数値が続く。
- S は秒の指定子であり、その後に秒を表す数値が続く。
指定子を含む日付と時間の要素は、その値が0の時には省略することができる
* Wikiから抜粋
正規表現
上記を踏まえて正規表現で表記すると、以下のような感じになった。
^P?([0-9]*Y)?([0-9]*M)?([0-9]*D)?T?([0-9]*H)?([0-9]*M)?([0-9]*S)$
後はグルーピングされた結果から、末尾の[YMDHMS]を除けば、スクリプトで利用できそうな形になってきた。