Module Str
module Str: sig
.. end
正規表現と高レベルの文字列処理
正規表現
type
regexp
コンパイル済み正規表現の型。
val regexp : string -> regexp
正規表現をコンパイルします。次の構文が使えます。
.
改行を除くすべての文字にマッチします。
*
(後置)先行する正規表現の 0 回以上の繰り返しにマッチします。
+
(後置)先行する正規表現の 1 回以上の繰り返しにマッチします。
?
(後置)先行する正規表現の 0 回か 1 回の出現にマッチします。
[..]
文字集合。 [a-z]
のよう -
で範囲を表します。
[^0-9]
のように先頭に ^
を書くと補集合を取ります。
]
を含めたい場合には ]
を最初に書きます。
-
を含めたい場合には最初か最後に書きます。
^
行頭にマッチします(マッチさせる文字の先頭か、改行文字の直後にマッチします)。
$
行末にマッチします(マッチさせる文字の末尾か、改行文字の直前にマッチします)。
\|
(中置)ふたつの正規表現の選択です。
\(..\)
囲まれた正規表現をグループ化し、名前をつけます。
\1
\(...\)
でマッチした最初のテキスト(\2
は 2 番目の式で、同様に \9
まであります)。
\b
語の境界にマッチします。
\
特殊文字をクォートします。 $^.*+?[]
が特殊文字です。
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
文字列のマッチと探索
val string_match : regexp -> string -> int -> bool
string_match r s start
は s
の start
番目から始まる部分文字列が正規表現 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
val match_beginning : unit -> int
val match_end : unit -> int
val matched_group : int -> string -> string
matched_group n s
は、直近の
Str.string_match
、
Str.search_forward
、
Str.search_backward
の呼び出しの正規表現の
\(...\)
の
n
番目のグループにマッチした
s
の部分文字列を返します。
s
がこれらの関数の呼び出し時に渡した文字列と同じであることは利用者が確認しなければなりません。
n
番目のグループがマッチしていなかった場合には
matched_group n s
は
Not_found
例外を発生させます。
これは、グループが選択
\|
やオプション
?
、繰り返し
\*
の中にあった場合に起こります。
例えば、空文字列は
\(a\)*
にマッチしますが、
matched_group 1 ""
は
Not_found
例外を発生させます。これは、最初のグループそれ自体はマッチしていないからです。
val group_beginning : int -> int
group_beginning n
は正規表現の
n
番目のグループにマッチした文字列の最初の文字の位置を返します。
RaisesNot_found
正規表現の n
番目のグループがマッチしていなかった場合
Invalid_argument
正規表現に n
個未満のグループしかなかった場合
val group_end : int -> int
group_end n
は正規表現の
n
番目のグループにマッチした文字列に後続する文字の位置を返します。
RaisesNot_found
正規表現の n
番目のグループがマッチしていなかった場合
Invalid_argument
正規表現に n
個未満のグループしかなかった場合
置換
val global_replace : regexp -> string -> string -> string
global_replace regexp templ s
は s
の部分文字列で regexp
にマッチしたものを templ
で置き換えたものを返します。
置換テンプレート templ
には \1
や \2
を含めることができます。
これらは正規表現中の対応するグループにマッチしたテキストで置き換えられます。
\0
は正規表現全体にマッチしたテキストを表します。
val replace_first : regexp -> string -> string -> string
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
val replace_matched : string -> string -> string
replace_matched repl s
は置換文字列 repl
中の \1
、 \2
等を、直近のマッチ操作で対応するグループにマッチしたテキストで置き換えたものを返します。
s
はマッチ操作でマッチした文字列と同じものでなければなりません。
分割
val split : regexp -> string -> string list
split r s
は r
にマッチする部分文字列を区切りとして s
を分割し、リストにして返します。
例えば split (regexp "[ \t]+") s
は s
を空白区切りの単語に分割します。
文字列の先頭と末尾に現れた区切り文字列は無視されます。
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
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 n
は s
中の n
番目より前の文字をすべて含む部分文字列を返します(n
番目の文字は含みません)。
val string_after : string -> int -> string
string_after s n
は s
中の n
番目より後の文字をすべて含む部分文字列を返します(n
番目の文字を含みます)。
val first_chars : string -> int -> string
val last_chars : string -> int -> string
last_chars s n
は s
の最後の n
文字を返します。