このページでは、SATySFi のライブラリ開発者向けに、SATySFi で使える正規表現について解説します。
注意: SATySFi の正規表現に関する公式ドキュメントは執筆時点ではまだ無いので、このページに書かれていることは変更される可能性があります。正規表現関係のプリミティブは Pull Request #48, #56 あたりで議論されています。重要な点として、2018 年 10 月現在まだマルチバイト文字列に対応していません。
regexp-of-string : string -> regexp
プリミティブを使うと正規表現型の値を作ることができます。使える正規表現の構文は SATySFi version 0.0.3 においては OCaml の Str.regexp
で使えるものと同じです。こちらをご覧ください。
コード例
let pat = regexp-of-string `nekketsu*`
string-match : regexp -> string -> bool
プリミティブを使うと正規表現のマッチ判定ができます。
コード例
let pat = regexp-of-string `nekketsu*`
let _ = string-match pat `nekketsuuu` % --> true
let _ = string-match pat `nekketuuuu` % --> false
split-on-regexp : regexp -> string -> (int, string) list
が用意されています。split-on-regexp pat str
で、pat
で表現されたセパレーターで str
を分割し、それぞれの文字列の最初の半角スペース列を取り除いて返します。返り値は整数と文字列のペアのリストになっており、整数は取り除かれた半角スペースの数です。
コード例
+p (
let pat = regexp-of-string `,` in
let show-result iss =
let string-of-is (i, s) =
`(` ^ (arabic i) ^ `, `# ^ s ^ `)`
in
let-rec aux iss =
match iss with
| [] -> ` `
| is :: iss -> (string-of-is is) ^ `; `# ^ (aux iss)
in
embed-string (`[` ^ (aux iss) ^ `]`)
in
let it = show-result(split-on-regexp pat `aaa, bbb, ccc, ddd, eee , fff`) in
{
#it;
}
);
コード例の組版結果 (SATySFi version 0.0.3)