Regexp

struct RRegexp

struct RRegexp {
    struct RBasic basic;
    struct re_pattern_buffer *ptr;
    long len;
    char *str;
};
Regexp の実体。struct re_pattern_buffer *ptr が正規表現のパターンを コンパイルしたもので、char *str はコンパイル前のパターン。ソースが わざわざとってあるのは、$KCODE の変化にあわせて再コンパイルする時に 使うため。そのほか inspect、== などでも使われている。

これから M17N が進めばこの文字列もエンコードを保持したりする必要が あるわけで、たぶん String を持つようになっていくのではないだろうか。

概要

正規表現の動作はインタプリタに近いものがある。ソースコードがあり、 それをコンパイルしたものがあり、インタプリタはそれをたどって実行 する。正規表現がひとつの「言語」であると言われるのはそういうことだ。

実際には、「ソースコード」は RRegexp.str であり、「オブジェクトコード」 は RRegexp.ptr であり、「コンパイラ」は re_compile_pattern()、 「インタプリタ」が re_match() である。他に大きな関数に re_search() が あるが、これは re_match() を下位に使うユーティリティみたいなもので、 本質的な中核ではない。ソースコードとなる正規表現がどういうものか、 というのはもうよくわかっていると思うので、以下そのほか三点について 順番に見ていく。

re_compile_pattern()

re_match()