gpt4 book ai didi

ruby - 仅匹配 RAR 文件集中第一个文件的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 17:19:49 24 4
gpt4 key购买 nike

要查看对哪个文件调用 unrar 命令,需要确定哪个文件是文件集中的第一个文件。

这里有一些示例文件名,其中 - 自然地 - 只有第一组应该匹配:

yes.rar
yes.part1.rar
yes.part01.rar
yes.part001.rar

no.part2.rar
no.part02.rar
no.part002.rar
no.part011.rar

使用 PCRE 兼容正则表达式的一种(有限)方法是:

.*(?:(?<!part\d\d\d|part\d\d|\d)\.rar|\.part0*1\.rar)

当我在 Rejax 测试它时,这在 Ruby 中不起作用然而。

您将如何编写一个 Ruby 兼容 正则表达式来仅匹配一组 RAR 文件中的第一个文件?

最佳答案

不要依赖文件名来确定哪个是第一个。您最终会发现一个极端情况,在这种情况下您会得到错误的文件。

RAR's headers假设它们是在较新版本的 RAR 中创建的,将告诉您哪个文件是卷中的第一个文件。

HEAD_FLAGS Bit flags:
2 bytes

0x0100 - First volume (set only by RAR 3.0 and later)

因此打开每个文件并检查 RAR header ,专门查找指示哪个文件是第一卷的标志。这永远不会失败,只要存档没有损坏。我已经对跨 RAR 文件进行了自己的测试,根据上面的链接,它们的 header 是正确的。

这是一种更安全的方法来确定哪个文件在这样的集合中是第一个。

关于ruby - 仅匹配 RAR 文件集中第一个文件的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/109916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com