正規表現ライブラリ書きました

暑いなー、と思って部屋でごろごろしてたら、いつのまにか正規表現ライブラリを書いてました。なにがおこったか、(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*)*ならできるけど。