Регулярные выражения в OCaml

Я хочу использовать регулярные выражения в OCaml, и кажется, что модуль Str предоставляет эти функции.

Итак, я попробовал простую программу:

open Str
let regx = regexp "."

но это дает мне следующую ошибку:

Файл "lol.ml", строка 1, символы 0-1: Ошибка: Ошибка при связывании lol.cmo: Ссылка на undefined глобальную `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.

Может кто-нибудь помочь мне понять это? Спасибо заранее

Ответы

Ответ 1

Из руководство:

Программы, использующие библиотеку str, должны быть связаны следующим образом:

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

Ответ 2

Или вы можете положить

#load "str.cma";;

если вы делаете это в интерпретаторе

Ответ 3

В качестве альтернативы модулю Str также Re2.

  • Установите его с помощью opam install re2
  • Используйте модуль в 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")
    
  • Скомпилировать с помощью ocamlbuild -use-ocamlfind -package re2 -package core -tag thread your_file.byte