我们正在尝试解析 GEDCOM 文件格式。根据其标准,CR 和 LF 的所有组合都可以有效地表示换行符。
这是一种基于行的格式,所以当我们已经匹配了数字和标签时,我们经常想要匹配行的其余部分。一个规则的例子是
"NAME ".+ { /* deal with the name */ }
换行符由
[\r\n]+ {return ENDLINE;}
这在 Windows 上运行良好,因为它在你背后将 \r\n 转换为 \n,但在 Linux 上却不行。在那里,\r 可以通过点匹配。因为 Flex 使用最长匹配规则,它要么在数据中包含 \r,要么将已知标记匹配到 UNKNOWNTAG 规则,因为这种技术上正确的匹配将长一个字节
一个解决方案可能是用 [^\r\n] 替换所有点,但这似乎不优雅。有没有更好的办法?