Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将ISO 8601持续时间转换为Lua中的格式化字符串?_Lua_Duration_Iso8601_Youtube Data Api - Fatal编程技术网

如何将ISO 8601持续时间转换为Lua中的格式化字符串?

如何将ISO 8601持续时间转换为Lua中的格式化字符串?,lua,duration,iso8601,youtube-data-api,Lua,Duration,Iso8601,Youtube Data Api,我最近一直在使用Youtube API v3(是的,我知道,它不是针对Lua的),但是当我需要将ISO 8601持续时间转换为格式化字符串时,web上没有任何帮助。我一直在谷歌搜索各地,寻找一个特定的图书馆,可以帮助这类事情,但不幸的是,没有Lua。除了Lua之外,还有数以千计的其他语言库 现在,我似乎被我甚至不知道如何使用的字符串模式所困扰。那么,除此之外,我将如何着手完成这项任务呢 ISO 8601持续时间示例: PT3M33S 我想把它转换成这样的东西: 3:33如果不想解析整个规范,请尝

我最近一直在使用Youtube API v3(是的,我知道,它不是针对Lua的),但是当我需要将ISO 8601持续时间转换为格式化字符串时,web上没有任何帮助。我一直在谷歌搜索各地,寻找一个特定的图书馆,可以帮助这类事情,但不幸的是,没有Lua。除了Lua之外,还有数以千计的其他语言库

现在,我似乎被我甚至不知道如何使用的字符串模式所困扰。那么,除此之外,我将如何着手完成这项任务呢

ISO 8601持续时间示例:
PT3M33S

我想把它转换成这样的东西:
3:33

如果不想解析整个规范,请尝试以下代码:

s="PT3M33S"
t=s:gsub("^.-(%d+)M(%d+)S","%1:%2")
print(t)
它使用Lua模式匹配。模式为:跳过所有内容,直到一行数字后跟一个
M
,然后找到一行数字后跟一个
S
。捕获两行数字,并在替换模式中使用它们

如果要提取这两个数字,请使用以下命令:

s="PT3M33S"
M,S=s:match("^.-(%d+)M(%d+)S")
print(M,S)

如果您想处理长达数小时的视频和其他特殊情况(可能<1分钟的视频只会生成例如“PT48S”),您可以尝试分别匹配“(%d*)H”、“(%d*)M”、“(%d*)S”,并将得到一个空字符串(缺少字段/隐式零)或一个数字字符串
tonumber(v)或0将获得数字<代码>本地N=t编号;H、 M,S=N(S:match“(%d*)H”)或0,N(S:match“(%d*)M”)或0,N(S:match“(%d*)S”)或0
(注意,这假设您知道输入是有效的,否则它是垃圾输入,垃圾输出。)您看过了吗?看过了,但它没有我需要的功能。。