のんびりSEの議事録

プログラミング系のポストからアプリに関してのポストなどをしていきます。まれにアニメ・マンガなど

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から抜粋

ISO 8601 - Wikipedia

正規表現

上記を踏まえて正規表現で表記すると、以下のような感じになった。

^P?([0-9]*Y)?([0-9]*M)?([0-9]*D)?T?([0-9]*H)?([0-9]*M)?([0-9]*S)$

f:id:tatsu_tora:20180315172519p:plain

正規表現テスト

後はグルーピングされた結果から、末尾の[YMDHMS]を除けば、スクリプトで利用できそうな形になってきた。