标准库中是否有完美的函数或一些推荐的方法来扩展 Rust 中的转义序列?

log*_*ina 0 rust

我正在编写的应用程序中接受用户输入,并希望扩展用户输入的转义序列。

例如,如果用户输入\\n它将被解释为 str \\\\n。我想以一般方式解释该字符串(转换为换行符)和类似的字符串。

我当然可以使用String::replace()最重要的那些,而没有其他人,但我更喜欢一个通用的解决方案,它也可以处理十六进制转义(\x61is a)。

Mas*_*inn 5

转义通常由词法分析器/解析器处理(基本上它们是语言语法的一部分),我不认为有一个 stdlib 函数可以管理它们,因为它会在低得多的级别上完成。

此外,转义往往是高度特定于语言的,以可能出乎意料的方式。Rust 有一个非常小的转义序列列表,与 C 中可用的垃圾相比,这可能是可取的,但我仍然不知道您是否想要允许任意十六进制或 unicode 转义序列。

因此,我建议设置您自己明确支持的转义列表,但如果您真的不想这样做,可能有第三方软件包可以帮助您

  • 有趣的事实:Rust 编译器源代码不包含将 `\n` 转换为字节 10 的信息。词法分析器 [简单地将转义序列转换为字符 `'\n'`](https://doc.rust -lang.org/nightly/nightly-rustc/src/rustc_lexer/unescape.rs.html#178-185)。用于编译编译器的 Rust 二进制文件知道翻译,而翻译又由另一个 Rust 编译器编译,依此类推,直到您使用 OCaml 编写的历史悠久的 Rust 编译器。 (6认同)