我只是試圖用re2來替換文件中的正則表達式,測試通過了一個簡單的字符串。OCaml re2多行字符串
# module Re2 = Re2.Std.Re2;;
# let re = Re2.create_exn "<key>Tags.*<\\/array>" ;;
# let orig = "abc <key>Tags</key><array><string>OCaml</string></array> end";;
# Re2.replace_exn ~f:(fun _ -> "<key>Tags</key><array/>") re orig;;
- : string = "abc <key>Tags</key><array/> end"
然而,當我把內容放入文件ss.xml
:
<key>Starred</key>
<false/>
<key>Tags</key>
<array>
<string>Think</string>
<string>Performance Test</string>
<string>Racket</string>
<string>OCaml</string>
</array>
<key>Time Zone</key>
<string>Asia/Shanghai</string>
OCaml的源代碼:
open Core.Std
open Async.Std
module Re2 = Re2.Std.Re2
let trans_reg (input: string) : string =
let re = Re2.create_exn "<key>Tags.*<\\/array>" in
let target = "<key>Tags</key><array/>" in
Re2.replace_exn ~f:(fun _ -> target) re input
let handle_file (filename: string) =
let%bind text = Reader.file_contents filename in
Writer.save (filename^".xml") ~contents:(trans_reg text)
let() =
Command.(run (async ~summary:"" Spec.empty (fun _ -> handle_file "ss.xml")))
沒有在我的新文件ss.xml.xml
不會改變。
我想知道:
- 如何在這種情況下,正則表達式匹配。
- 我們什麼時候應該使用參數replace
Match.t
in~f:(Match.t -> string)
? ()
謝謝,你幫了我很多。我只是想修改DayOne日記的數據,xml格式很簡單,正則表達式在這種情況下工作。 – liweijian