2015-03-17 8 views
1

OCaml, как разобрать большие многострочные текстовые данные, используя модуль Page. Игнорирование символа начала новой строки.OCaml синтаксический анализ большого текста

let get_info content = 
    let re = Str.regexp "\\(.+?\\)" in 
    match Str.string_match re content 0 with 
    | true -> print_endline("-->"^(Str.matched_group 1 content)^"<--") 
    | false -> print_endline("not found");; 

В этом примере возвращается только первая строка, но требуется текст в нескольких строках.

+0

Я думаю, что это то, что вы ищете .. HTTP: // StackOverflow .com/a/159139/175063 – Leptonator

+0

Спасибо, что так много примеров послужили хорошей идеей. –

ответ

2

По http://pleac.sourceforge.net/pleac_ocaml/patternmatching.html:

  • регулярных выражений Str в отсутствие рисунка пробельные сопоставления.

Итак, здесь обходной путь предложил на этой странице:

#load "str.cma";; 
... 
let whitespace_chars = 
    String.concat "" 
    (List.map (String.make 1) 
     [ 
     Char.chr 9; (* HT *) 
     Char.chr 10; (* LF *) 
     Char.chr 11; (* VT *) 
     Char.chr 12; (* FF *) 
     Char.chr 13; (* CR *) 
     Char.chr 32; (* space *) 
     ]) 

, а затем

let re = Str.regexp "\\((?:[^"^whitespace_chars^"]|"^whitespace_chars^")+?\\)" in 
+0

Спасибо, очень хороший пример работы с регулярным выражением. –

Смежные вопросы