在Ocaml中是否有标准方式将(例如)a\n
(三字节字符串:0x61,0x5c,0x6e
)转换为两字节字符串:0x61,0x0a
?Ocaml中的转义序列
我的Ocaml程序可以接收带有转义字符的字符串,如何“unescape”它们?
在Ocaml中是否有标准方式将(例如)a\n
(三字节字符串:0x61,0x5c,0x6e
)转换为两字节字符串:0x61,0x0a
?Ocaml中的转义序列
我的Ocaml程序可以接收带有转义字符的字符串,如何“unescape”它们?
从http://caml.inria.fr/mantis/view.php?id=3888很好的解决方案:
let unescape s = Scanf.sscanf ("\""^s^"\"") "%S%!" (fun u -> u)
如果您正在使用的OCaml 4.0.0或更高版本,可以使用Scanf.unescaped
。
实施例:
# open Scanf
# Scanf.unescaped "a\\n";;
- : bytes = "a\n"
# Scanf.unescaped "\\n\\t\\\\";;
- : bytes = "\n\t\\"
接口:(via OCaml docs)
val unescaped : string -> string
返回与转义序列的参数的副本,以下OCaml中的词汇公约,换成它们对应的特殊字符。如果参数中没有转义序列,则仍然返回一个副本,与String.escaped相反。
由于4.00.0
除了它假定OCaml的转义惯例,这可能是从你输入不同 – ygrek 2012-04-17 13:45:19