OCaml中的正则表达式

时间:2010-07-10 22:31:05

标签: regex module linker ocaml

我想在OCaml中使用 regexps ,似乎Str模块提供了这些功能。

所以我尝试了一个简单的程序:

open Str
let regx = regexp "."

但是它给了我以下错误

  

文件“lol.ml”,第1行,字符0-1:   错误:链接lol.cmo时出错:   引用未定义的全局`Str'

好像模块不存在但如果我删除open Str则表示regexp是未绑定的值。

我不知道它是什么类型的问题,Str应该是一个标准模块(根据http://caml.inria.fr/pub/docs/old-311/libref/Str.html)所以我无能为力......唯一的想法是我认为是签名( mli)存在,但实现(ml)不是。

我正在根据Objective Caml version 3.11.0工具运行ocaml

任何人都可以帮我解决这个问题吗? 提前致谢

3 个答案:

答案 0 :(得分:29)

来自the manual

  

使用str库的程序必须按如下方式链接:

ocamlc other options str.cma other files
ocamlopt other options str.cmxa other files

答案 1 :(得分:19)

或者你可以把

#load "str.cma";;

如果您在口译员中这样做

答案 2 :(得分:2)

作为Str模块的替代方案,还有Re2

  1. 使用opam install re2
  2. 进行安装
  3. 使用your_file.ml中的模块,如下所示:

    open Re2.Std
    open Re2.Infix
    let change input_text = Re2.rewrite_exn ~/"change this" "to that" input_text
    let () = printf "%s" (change "change this")
    
  4. 使用ocamlbuild -use-ocamlfind -package re2 -package core -tag thread your_file.byte

  5. 进行编译