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

标签 ruby regex rar

要查看对哪个文件调用 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/

相关文章:

windows - 如何故意破坏 rar 存档(使其不可读)?

ruby - 在 Ruby 中评估的最后一个表达式

ruby - 将键值对添加到哈希数组中的所有哈希

java - 复杂字符串数据提取

java - 如何在 Google App Engine 中提取 rar 文件 (AppEngineFile)

python - 在 Python 中使用 rarfile 从 RAR 存档中提取单个文件

ruby-on-rails - 获取复选框的值 [Ruby/Sinatra(Rails)]

ruby-on-rails - 测试函数包含 API 请求

javascript - 用于检查 .css 文件的正则表达式

ruby - 正则表达式前瞻/后视评论