1 个不稳定版本
0.1.0 | 2020年4月9日 |
---|
#1286 in 文件系统
19KB
299 行
regex2fat
你是否曾经想要匹配一个正则表达式,但只有 fat32 驱动器?是否想要将你的正则表达式 DFAs 序列化成被超过30亿设备广泛支持的格式之一? 目录循环是你的东西吗?
不用担心,有了 regex2fat
,这比以前任何时候都要简单!只需一行 regex2fat '[YOUR] F{4}VOUR}{1,7}E (R[^E]G)*EX HERE.' /dev/whatever
,你将拥有一个 fat32 正则表达式 DFA。例如,要检查字符串 'Y FFFFVOURRE EX HEREM'
是否匹配,只需将其挂载并检查 '/Y/SPACE/F/F/F/F/V/O/U/R/R/E/SPACE/E/X/SPACE/H/E/R/E/M/MATCH'
是否存在。
要运行它,您可以通过安装 cargo,然后运行cargo install regex2fat
(或者直接从本仓库编译)。如果您在路径中已有 cargo 的 bin 目录,应该可以像上面描述的那样调用它。创建的文件将是一个 fat32 图像,可能可以通过某种方式挂载或放置在驱动器上,但很可能不应该这么做。
常见问题解答
Q: 这是如何工作的?
A: 常规正则表达式(即没有后引用和类似的高级功能)可以被转换成所谓的 DFA(确定性有限自动机)。这基本上是一系列箭头在状态之间移动,其中箭头被标记为字母,以便状态中的字母会导致当前状态沿着箭头移动到另一个状态,其中有一组状态是接受状态。是的,我解释得不好,如果你不知道这是什么,最好阅读维基百科关于 DFA 的文章。
因为我懒惰,我使用了BurntSushi/regex-automata从正则表达式获取 DFA。
虽然 Fat32 通常具有树状结构,但每个目录只是引用文件系统上的任何位置的块,因此相同的块可以从多个目录中引用。目录也没有父目录的显式字段,因此可以省略..
。这允许在文件系统中存在图结构,而 DFA 基本上就是这样。
Q: 我应该在任何地方使用这个吗?
A: 不,但我不能阻止你。
Q: 这真的管用吗?
A: 我已经在 Windows 10 和 Linux 上试过了。据我所知,它已经在 Windows 上完美运行。
在 Linux 上,fat32 代码声称如果在一个循环(或类似的情况)中有两个具有相同目录名和相同父级的 dentries,则目录无效,因此一些路径被禁止。
在嵌入式设备上尝试可能很有趣。
Q: NOOOOOOOOOOO!!! 你不能把 DFA 转换成 FAT32 文件系统!!!你不能有一个有多个父目录的目录!!!你正在打破没有 LOOPERINOS 的假设 NOOOOOOOOO
A: 哈哈 OS 驱动的正则表达式 go brrrrr
依赖项
~3.5MB
~34K SLoC