正規表現ライブラリ書きました
暑いなー、と思って部屋でごろごろしてたら、いつのまにか正規表現ライブラリを書いてました。なにがおこったか、(ry
まだ、直したいところがいくつかありますが、とりあえず動くようにはなったので公開しときます。
使い方
シグネチャはこんな感じ。
val regexp : string -> char regexp val compile : 'a regexp -> 'a list -> ('a list * 'a list) option = <fun>
let f () = let r = compile @@ regexp "(foo)*" in let s = explode "foofoo" in match r s with Some (matched,rest) -> Printf.printf "matched = %s\n" @@ implode matched; Printf.printf "rest = %s\n" @@ implode rest | None -> print_endline "no match"
直したいところ
- option型を繋げるところが、Maybeモナドっぽい気がする
- gsubとかのありがちなメソッドを作りたい
- 'foo**'がパースできない。(foo*)*ならできるけど。