Регулярные выражения в OCaml - PullRequest
21 голосов
/ 11 июля 2010

Я хочу использовать регулярные выражения в OCaml, и кажется, что модуль 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), так что я не в курсе ... единственное, о чем я думал, это подпись (* 1022) *) присутствует, но реализация (ml) отсутствует.

Я использую Objective Caml version 3.11.0 в соответствии с инструментом ocaml.

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

Ответы [ 3 ]

29 голосов
/ 11 июля 2010

С руководство :

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

ocamlc other options str.cma other files
ocamlopt other options str.cmxa other files
19 голосов
/ 11 июля 2010

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

#load "str.cma";;

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

2 голосов
/ 25 сентября 2015

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

  1. Установите его, используя opam install re2
  2. Используйте модуль в 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")
    
  3. Компилировать с ocamlbuild -use-ocamlfind -package re2 -package core -tag thread your_file.byte

...