我想通過以下方式我做了解析的ISO 8601持續時間:可選,並以任意順序
P(\d+Y)?(\d+M)?(\d+D)?(\d+W)?T(\d+H)?(\d+M)?(\d+S)?
但問題是,它的工作原理上PT158M12S
但不是PT12S158M
。是否有可能讓P
之後的組和T
之後的組以任意順序排列?
我想通過以下方式我做了解析的ISO 8601持續時間:可選,並以任意順序
P(\d+Y)?(\d+M)?(\d+D)?(\d+W)?T(\d+H)?(\d+M)?(\d+S)?
但問題是,它的工作原理上PT158M12S
但不是PT12S158M
。是否有可能讓P
之後的組和T
之後的組以任意順序排列?
嘗試
P(\d+[YMDW]){0,4}T(\d+[HMS]){0,3}
(短版羅希特的回答)
但是這並不妨礙重複任何一組,例如PT1M2M
。之後你必須檢查。
這不會阻止重複組,這就是爲什麼我刪除了我的答案。 –
重複的組可以用幾行代碼來解決,不需要爲了保存幾行代碼而使正則表達式過於複雜或不可讀。 – KurzedMetal
我不認爲一個簡單的正則表達式可以做到這一點,有時最好是後處理正則表達式匹配的結果... –
谷歌的封庫中有這樣的解析ISO 8601的持續時間內置功能:Interval.fromIsoString(duration)
只是置換它們。 P之後的部分有12個排列,T之後的部分有6個排列。 – nhahtdh
你需要什麼正則表達式? – Bergi