5

Ocaml 中是否有一种标准方法,可以将(例如)a\n(三字节字符串:)转换为0x61,0x5c,0x6e两字节字符串:0x61,0x0a

我的 Ocaml 程序可以接收带有转义字符的字符串,如何“取消转义”它们?

4

2 回答 2

3

来自http://caml.inria.fr/mantis/view.php?id=3888的不错的解决方案:

let unescape s = Scanf.sscanf ("\"" ^ s ^ "\"") "%S%!" (fun u -> u)

于 2012-04-17T12:55:40.883 回答
2

如果您使用的是 OCaml 4.0.0 或更高版本,则可以使用Scanf.unescaped.

例子:

# open Scanf
# Scanf.unescaped "a\\n";;
- : bytes = "a\n"      
# Scanf.unescaped "\\n\\t\\\\";;
- : bytes = "\n\t\\"

接口:(通过 OCaml 文档

val unescaped : string -> string

遵循 OCaml 的词法约定,返回带有转义序列的参数副本,并替换为相应的特殊字符。如果参数中没有转义序列,仍然返回一个副本,这与 String.escaped 相反。

自 4.00.0

于 2015-11-02T04:09:39.273 回答