Ocaml中的转义序列

时间:2012-04-17 12:17:33

标签: text escaping ocaml

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

如果您使用的是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起