Module Str


module Str: sig .. end
正規表現と高レベルの文字列処理


正規表現


type regexp 
コンパイル済み正規表現の型。
val regexp : string -> regexp
正規表現をコンパイルします。次の構文が使えます。
val regexp_case_fold : string -> regexp
regexp と同じですが、コンパイルされた正規表現は大文字小文字の違いを無視してマッチします。 すなわち、大文字と小文字を等価なものとして扱います。
val quote : string -> string
Str.quote s は文字列 s そのものにマッチし、それ以外にマッチしない正規表現文字列を返します。
val regexp_string : string -> regexp
Str.regexp_string s は文字列 s そのものにマッチし、それ以外にマッチしない正規表現を返します。
val regexp_string_case_fold : string -> regexp
Str.regexp_string_case_foldStr.regexp_string とほぼ同じですが、大文字小文字の違いを無視する正規表現を返します。

文字列のマッチと探索


val string_match : regexp -> string -> int -> bool
string_match r s startsstart 番目から始まる部分文字列が正規表現 r にマッチするかどうか検査します。 文字列の最初の文字は通常通り 0 番目です。
val search_forward : regexp -> string -> int -> int
search_forward r s start は文字列 s の部分文字列で正規表現 r にマッチするものを探索します。 探索は start 番目の文字から始まり、文字列の終端に向かって進みます。 最初に一致した部分文字列の開始位置を返します。 一致する文字列がない場合には Not_found 例外が発生します。
val search_backward : regexp -> string -> int -> int
search_backward r s last は文字列 s の部分文字列で正規表現 r にマッチするものを探索します。 探索は last 番目の文字から始まり、文字列の先頭に向かって進みます。 最初に一致した部分文字列の開始位置を返します。 一致する文字列がない場合には Not_found 例外が発生します。
val string_partial_match : regexp -> string -> int -> bool
Str.string_match とほぼ同じですが、引数の文字列が与えられた正規表現にマッチする文字列の接頭辞であるときにも真を返します。 これは完全にマッチした場合も含みます。
val matched_string : string -> string
matched_string s は、直近の Str.string_matchStr.search_forwardStr.search_backward でマッチした s の部分文字列を返します。 s がこれらの関数に渡した文字列と同じであることは利用者が確認しなければなりません。
val match_beginning : unit -> int
match_beginning()Str.string_matchStr.search_forwardStr.search_backward でマッチした部分文字列の最初の文字の位置を返します。
val match_end : unit -> int
match_end()Str.string_matchStr.search_forwardStr.search_backward でマッチした部分文字列に後続する文字の位置を返します。
val matched_group : int -> string -> string
matched_group n s は、直近の Str.string_matchStr.search_forwardStr.search_backward の呼び出しの正規表現の \(...\)n 番目のグループにマッチした s の部分文字列を返します。 s がこれらの関数の呼び出し時に渡した文字列と同じであることは利用者が確認しなければなりません。 n 番目のグループがマッチしていなかった場合には matched_group n sNot_found 例外を発生させます。 これは、グループが選択 \| やオプション ?、繰り返し\* の中にあった場合に起こります。 例えば、空文字列は \(a\)* にマッチしますが、 matched_group 1 ""Not_found 例外を発生させます。これは、最初のグループそれ自体はマッチしていないからです。
val group_beginning : int -> int
group_beginning n は正規表現の n 番目のグループにマッチした文字列の最初の文字の位置を返します。
Raises
val group_end : int -> int
group_end n は正規表現の n 番目のグループにマッチした文字列に後続する文字の位置を返します。
Raises

置換


val global_replace : regexp -> string -> string -> string
global_replace regexp templ ss の部分文字列で regexp にマッチしたものを templ で置き換えたものを返します。 置換テンプレート templ には \1\2 を含めることができます。 これらは正規表現中の対応するグループにマッチしたテキストで置き換えられます。 \0 は正規表現全体にマッチしたテキストを表します。
val replace_first : regexp -> string -> string -> string
Str.global_replace と同じですが、正規表現にマッチした最初の部分文字列だけが置き換えられます。
val global_substitute : regexp -> (string -> string) -> string -> string
global_substitute regexp subst s は、 s の部分文字列で regexp にマッチしたものを、 subst の戻り値で置き換えます。 subst はマッチした部分文字列ごとに一回ずつ、 s (文字列全体)を引数として呼び出されます。
val substitute_first : regexp -> (string -> string) -> string -> string
Str.global_substitute と同じですが、正規表現にマッチした最初の部分文字列だけが置換されます。
val replace_matched : string -> string -> string
replace_matched repl s は置換文字列 repl 中の \1\2 等を、直近のマッチ操作で対応するグループにマッチしたテキストで置き換えたものを返します。 s はマッチ操作でマッチした文字列と同じものでなければなりません。

分割


val split : regexp -> string -> string list
split r sr にマッチする部分文字列を区切りとして s を分割し、リストにして返します。 例えば split (regexp "[ \t]+") ss を空白区切りの単語に分割します。 文字列の先頭と末尾に現れた区切り文字列は無視されます。
val bounded_split : regexp -> string -> int -> string list
Str.split と同じですが、最大 n 個の部分文字列群に分割します。 ここで n は追加された整数引数を指します。
val split_delim : regexp -> string -> string list
Str.split と同じですが、文字列の先頭と末尾に現れた区切り文字列を無視せず、結果に空文字列を含めます。 例えば、 split_delim (regexp " ") " abc "[""; "abc"; ""] を返すのに対し、同一の引数で split を呼び出すと ["abc"] が返ります。
val bounded_split_delim : regexp -> string -> int -> string list
Str.bounded_split と同じですが、文字列の先頭と末尾に現れた区切り文字列を無視せず、結果に空文字列を含めます。

type split_result =
| Text of string
| Delim of string
val full_split : regexp -> string -> split_result list
Str.split_delim と同じですが、区切り文字列間の部分文字列と同じように、区切り文字列自体も結果に含めます。 結果のリスト中で、前者は Text とタグ付けされ、後者は Delim とタグ付けされます。 例えば full_split (regexp "[{}]") "{ab}"[Delim "{"; Text "ab"; Delim "}"] を返します。
val bounded_full_split : regexp -> string -> int -> split_result list
Str.bounded_split_delim と同じですが、区切り文字列間の部分文字列と同じように、区切り文字列自体も結果に含めます。 結果のリスト中で、前者は Text とタグ付けされ、後者は Delim とタグ付けされます。

部分文字列の抽出


val string_before : string -> int -> string
string_before s ns 中の n 番目より前の文字をすべて含む部分文字列を返します(n 番目の文字は含みません)。
val string_after : string -> int -> string
string_after s ns 中の n 番目より後の文字をすべて含む部分文字列を返します(n 番目の文字を含みます)。
val first_chars : string -> int -> string
first_chars s ns の最初の n 文字を返します。 この関数は Str.string_before と同じ関数です。
val last_chars : string -> int -> string
last_chars s ns の最後の n 文字を返します。