要查看对哪个文件调用 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 bytes0x0100 - First volume (set only by RAR 3.0 and later)
因此打开每个文件并检查 RAR header ,专门查找指示哪个文件是第一卷的标志。这永远不会失败,只要存档没有损坏。我已经对跨 RAR 文件进行了自己的测试,根据上面的链接,它们的 header 是正确的。
这是一种更安全的方法来确定哪个文件在这样的集合中是第一个。
关于ruby - 仅匹配 RAR 文件集中第一个文件的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/109916/