メモしておこう。
PCRE-OCamlはopamでインストールできる。
$ opam install pcre-ocaml
以下、utopでの例。
utop[0]> #require "pcre";;
utop[1]> open Pcre;;
execはsubstringsを返す。
utop[16]> let s = exec ~rex:(regexp "aaa(.*)bbb") "aaaほげbbbほげccc";;
val s : substrings = <abstr>
get_substringsでstring arrayを取得できる。
utop[17]> get_substrings s;;
- : string array = [|"aaaほげbbb"; "ほげ"|]
utop[18]> (get_substrings s).(0);;
- : string = "aaaほげbbb"
マッチしないときは例外が出る。
utop[42]> let s = exec ~rex:(regexp "ほげげ") "aaaほげbbb";;
Exception: Not_found.
exec_allはsubstrings arrayを返す。
utop[36]> let sa = exec_all ~rex:(regexp "aaa(.*?)aaa") "aaaほげ1aaa aaaほげ2aaa";;
val sa : substrings array = [|<abstr>; <abstr>|]
utop[37]> get_substrings sa.(0);;
- : string array = [|"aaaほげ1aaa"; "ほげ1"|]
utop[38]> get_substrings sa.(1);;
- : string array = [|"aaaほげ2aaa"; "ほげ2"|]
マッチした文字列の配列を返すextract, extract_all関数もある。(こちらの関数の方が扱いが簡単。)
utop[48]> extract ~rex:(regexp "aaa(.*?)aaa") "aaaほげ1aaa aaaほげ2aaa";;
- : string array = [|"aaaほげ1aaa"; "ほげ1"|]
utop[49]> extract_all ~rex:(regexp "aaa(.*?)aaa") "aaaほげ1aaa aaaほげ2aaa";;
- : string array array =
[|[|"aaaほげ1aaa"; "ほげ1"|]; [|"aaaほげ2aaa"; "ほげ2"|]|]
UTF-8で日本語を使うときには、フラグ指定で、
regexp ~flags:[`UTF8] "aaa(.*?)aaa"
としておいた方が良いかな?
0 件のコメント:
コメントを投稿